執行可以多次重用或動態生成的 Transact-SQL 語句或批處理。Transact-SQL 語句或批處理可以包含嵌入參數。
sp_executesql [@stmt =] stmt
[
{, [@params =] N'@parameter_name data_type [,...n]' }
{, [@param1 =] 'value1' [,...n] }
]
[@stmt =] stmt
包含 Transact-SQL 語句或批處理的 Unicode 字符串,stmt 必須是可以隱式轉換為 ntext 的 Unicode 常量或變量。不允許使用更復雜的 Unicode 表達式(例如使用 + 運算符串聯兩個字符串)。不允許使用字符常量。如果指定常量,則必須使用 N 作為前綴。例如,Unicode 常量 N'sp_who' 是有效的,但是字符常量 'sp_who' 則無效。字符串的大小僅受可用數據庫服務器內存限制。
stmt 可以包含與變量名形式相同的參數,例如:
N'SELECT * FROM Employees WHERE EmployeeID = @IDParameter'
stmt 中包含的每個參數在 @params 參數定義列表和參數值列表中均必須有對應項。
[@params =] N'@parameter_name data_type [,...n]'
字符串,其中包含已嵌入到 stmt 中的所有參數的定義。該字符串必須是可以隱式轉換為 ntext 的 Unicode 常量或變量。每個參數定義均由參數名和數據類型組成。n 是表明附加參數定義的占位符。stmt 中指定的每個參數都必須在 @params 中定義。如果 stmt 中的 Transact-SQL 語句或批處理不包含參數,則不需要 @params。該參數的默認值為 NULL。
[@param1 =] 'value1'
參數字符串中定義的第一個參數的值。該值可以是常量或變量。必須為 stmt 中包含的每個參數提供參數值。如果 stmt 中包含的 Transact-SQL 語句或批處理沒有參數,則不需要值。
n
附加參數的值的占位符。這些值只能是常量或變量,而不能是更復雜的表達式,例如函數或使用運算符生成的表達式。
0(成功)或 1(失敗)
從生成 SQL 字符串的所有 SQL 語句返回結果集。
例子(感謝鄒建提供)
declare @user varchar(1000)
declare @moTable varchar(20)select @moTable = 'MT_10'
declare @sql nvarchar(4000) --定義變量,注意類型
set @sql='select @user = count(distinct userid) from '+@moTable --為變量賦值--執行@sql中的語句
exec sp_executesql @sql
,N'@user varchar(1000) out' --表示@sql中的語句包含了一個輸出參數
,@user out --和調用存儲過程差不多,指定輸出參數值print @user