1. 程式人生 > >sql server 獲取動態sql輸出結果

sql server 獲取動態sql輸出結果

不帶輸出結果 我們一般會這樣寫

例子:一個輸出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 procedure
GetCodeByOut @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 @userName
varchar(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