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;
表達式的形式比較多,慢慢接觸就熟悉了。