執行動態 sql 併為 輸出引數賦值、sp_executesql 使用方法
阿新 • • 發佈:2018-12-14
sp_executesql 過程與 exec 關鍵字區別
sp_executesql 可以在動態 sql 中使用變數,並且將變數輸出
exec 則只能執行動態 sql 和 儲存過程(執行過程不需要加小括號,執行動態 sql 則必須加小括號)
----------------------------------------------------------------------------------
declare @sql1 nvarchar(100)
declare @sql2 nvarchar(100)
declare @str nvarchar(10)
--1 執行需要為變數賦值的動態 sql
set @str='1'
set @sql1='select @count1=COUNT(*) from Base_Product where [email protected]'
print @sql1-- 除錯資訊輸出
--注意:執行 sp_executesql 儲存過程不需要加 小括號 ,加了就報錯!
EXECUTE sp_executesql
@sql1,
N'@count1 int output,@str1 varchar(10)',
@count1 = @count output,@
select @count --檢視統計數
--2 執行普通動態 sql
set @sql2='select top 10 * from Base_Product'
print @sql2-- 除錯資訊輸出
EXECUTE (@sql2) --注意:這裡如果加小括號為執行 sql 語句,不加小括號預設為執行'儲存過程'
/*
對 sp_executesql 儲存過程做個說明
第一個引數:
很明顯是要執行的拼接後的 sql 語句了,其中@count1、@str1為佔位符,
為了測試所以選擇了一個int和一個nvarchar 型別做測試
第二個引數:
這個引數是對第一個引數中的‘佔位符’進行說明和定義用的
需要動態執行的指令碼: 'select @count1=COUNT(*) from Base_Product where [email protected]'
對佔位符進行的說明: N'@count1 int output,@str1 varchar(10)'
如果動態指令碼中有多個佔位符時,需要在說明字串中使用‘逗號’隔開,
如果需要在執行‘動態sql’後得到其中引數的值,需要為其標註為 output,即 @count1 int output
第三個引數到第N個引數:
這個引數是對‘佔位符’中變數與實際變數繫結用的,
如果在第二個引數中標記‘站位符’為 output ,這裡也需要進行一下標記
即:@count1 = @count output
(注意‘佔位符’中的變數名不需要加單引號)
sp_executesql 語法詳見:
http://msdn.microsoft.com/zh-cn/library/ms188001.aspx
*/
/*轉載保留:http://write.blog.csdn.net/postedit/7648579