sql存储过程表变量
不行。如果想这么干,就拼个语句,然后用exec 执行。
decalre @sql varchar(2000)
set @sql = 'select count (*) from' + @table
exec (@sql)
B. SQL存储过程可以定义表变量吗
查了SQL2000的帮助手册,存储过程参数的数据类型。除 table 之外的其他所有数据类型均可以用作存储过程的参数。
所以说不行。
C. sql server 存储过程 表变量名无法用在查询字符串中
要注意一点:用execute执行的动态SQL中是无法直接使用外部所定义的变量的(就好像执行动态SQL内与外是两个不同的会话。用存储过程sp_executesql倒是可以传递其他标量类型的参数,但是也无法传递表变量)。而你要实现的功能是在执行动态SQL之前,已经把数据查询到一个表变量中了,然后要在动态SQL中再查询此表变量,目前来说是不能实现的。
可以使用临时表,或者游标,这两个可以在动态SQL中保持有效状态。
使用游标的示例如下:
declare@tbtable(usernamenvarchar(20))
insertinto@tb
select'Andy'
union
select'Jack'
declarecurcursorfor
selecttop10usernamefrom@tb
declare@sqlnvarchar(1000),@usernamenvarchar(20)
set@sql='opencur
fetchnextfromcur
into@v_user_name'
executesp_executesql@sql,N'@v_user_namenvarchar(20)output',@usernameout
closecur
deallocatecur
select@username
而对于你的要在动态SQL中执行select语句,直接使用临时表会比较方便些。
D. SQL 存储过程变量
整个语句块创建了一个存储过程,其中的查询使用了存储过程的参数。你可以通过直接执行存储过程,将值传给传出过程的参数,来实现执行查询。
例如:
execute dbo].[p_sele_sp] '%a%','1%',‘aaa%’,'bbb%';
如果希望直接执行查询语句,则需要用declare关键字事先声明变量。如下:
-- 声明变量
declare @spbh varchar(20) , @zjm varchar(100) , @sptm varchar(20) , @splb varchar(20)
-- 给变量赋值
set @spbh = ’%a%'
set @zjm = '1%'
set @sptm = ‘aaa%’
set @splb = 'bbb%'
--执行查询
SELECT TOP 200 spbh,spname,dw,spgg,scqy,spcd,sl,lsj,zdsj,spid,splb,jj,
sptm,spsx,kfid,jx,pzwh,is_sy,jbz,zbz,ajia,bjia,cjia,djia,bz,bz1,bz2,bz3,bz4,bz5,bz6,bz7,bz8,bz9
FROM t_sp_info
WHERE ( status = '是' ) AND
( pym like @zjm OR spname like @zjm OR spbh like @spbh OR sptm like @sptm ) AND ( splb like @splb )
E. sql的存储过程,“必须声明表变量 "@tab"。”错哪了啊
update @tab set @col = replace(@col,'6','6')
这里的@TAB 不能是变量
update tablename
F. 在sql中如何建一个存储过程,调用这个存储过程建立一个表,其中列名是通过变量传递进去的
create or replace procure p_create_table(sname varchar2)
is
v_sql varchar2(3000 char);
begin
v_sql:='create table t_name (' ||sname||')';
execute v_sql;
end ;
G. 存储过程中表名为变量,并且查询结果要赋给另一个变量
赋值号前面是变量名;
赋值号后面是表达式;
表达式可以是常量,比如:a=1;
也可以是:
a=1;
b=a*4+5;
表达式的形式比较多,慢慢接触就熟悉了。