sql server 獲取動態sql輸出結果
阿新 • • 發佈:2018-11-02
不帶輸出結果 我們一般會這樣寫
例子:一個輸出6位遞增號碼結果
ALTER proc GetCode @tb varchar(50), @tag varchar(50) as declare @sqlstring nvarchar(max) set @sqlstring=' SELECT '''+@tag+'''+RIGHT(1000001+ISNULL(RIGHT(MAX(FCode),6),0),6) FROM '+@tb --print @sqlstring exec (@sqlstring) GO
但是如果儲存過程需要和其他過程繼續運算,我需要把結果放到一個變數,這個時候 就需SQL內建 儲存過程寫法
先看看語法:
sp_executesql [ @stmt = ] stmt [ {, [@params=] N'@parameter_name data_type [ [ OUT [ PUT ][,...n]' } {, [ @param1 = ] 'value1' [ ,...n ] } ]
然後我們來改造
(用法解釋 : 我們需要把結果放入@temp, 然後 在 sp_executesql 中聲名 @temp的型別 後面把output的變數放後面 , 這樣 temp 的值就會賦給 outvalue 裡面了)
例子:
CREATE procedureGetCodeByOut @tb varchar(50), @tag varchar(50), @outvalue varchar(50) output as declare @sqls nvarchar(4000) set @sqls='SELECT @temp= '''+@tag+'''+RIGHT(1000001+ISNULL(RIGHT(MAX(FCode),6),0),6) from '+@tb exec sp_executesql @sqls,N'@temp varchar(50) output',@outvalue output
呼叫
declare @userNamevarchar(50) exec GetCodeByOut 'T_Car','HB',@userName output select @userName
如果有多個輸出引數 同理依次聲名即可
declare @num int, @sqls nvarchar(4000) ,@sname char(10) set @sqls='select @a=sno,@b=sname from aa ' exec sp_executesql @sqls,N'@a int output,@b char(10) output',@num output,@sname output select @num select @sname
參考文章:
https://blog.csdn.net/lin00kun11/article/details/50535643