SQL SERVER只要將SQL語句組成字串,然後呼叫sp_executesql這個預存程序,就可以執行動態SQL語法。
sp_executesql執行可重複使用多次的 Transact-SQL 語句或批次,或動態建立的語句。 Transact-SQL 語句或批次可以包含內嵌參數。
語法
1
2
3
4
5
sp_executesql [ @stmt = ] statement
[
{ , [ @params = ] N'@parameter_name data_type [ OUT | OUTPUT ][ ,...n ]' }
{ , [ @param1 = ] 'value1' [ ,...n ] }
]
範例1:執行簡單 SELECT 語句
sp_executesql執行簡單 SELECT 語句
下列範例會建立並執行簡單 SELECT 語句,其中包含名為的 @level內嵌參數。
1
2
3
4
5
6
-- Uses AdventureWorks2022
EXECUTE sp_executesql
N'SELECT * FROM AdventureWorksPDW2012.dbo.DimEmployee
WHERE EmployeeKey = @level',
N'@level TINYINT',
@level = 109;
範例2
可以指定資料表名稱,並傳回資料表筆數的預存程序
1
2
3
4
5
6
7
8
9
--可以指定資料表名稱,並傳回資料表筆數的預存程序
create or alter proc uspGetCount
@table_name varchar(20) --宣告傳入的參數(資料表名)
as
declare @sql_string nvarchar(100) --宣告變數(用來存入組好的SQL語句)
begin
set @sql_string = N'select count(1) from ' + @table_name --組SQL字串
exec sp_executesql @sql_string --執行SQL語句
end
執行sp:
1
2
3
4
exec uspGetCount N'商品清單'
--執行結果
--13