執行以字串形式提供的 SQL 語句

在某些情況下,你需要執行放置在字串中的 SQL 查詢。EXEC,EXECUTE 或系統過程 sp_executesql 可以執行以字串形式提供的任何 SQL 查詢:

sp_executesql N'SELECT * FROM sys.objects'
-- or
sp_executesql @stmt = N'SELECT * FROM sys.objects'
-- or
EXEC sp_executesql N'SELECT * FROM sys.objects'
-- or
EXEC('SELECT * FROM sys.columns')
-- or
EXECUTE('SELECT * FROM sys.tables')

此過程將返回與作為語句文字提供的 SQL 查詢相同的結果集。sp_executesql 可以執行以字串文字,變數/引數甚至表示式提供的 SQL 查詢:

declare @table nvarchar(40) = N'product items'
EXEC(N'SELECT * FROM ' + @table)
declare @sql nvarchar(40) = N'SELECT * FROM ' + QUOTENAME(@table);
EXEC sp_executesql @sql

你需要 QUOTENAME 函式來轉義 @table 變數中的特殊字元。如果 @table 變數包含空格,括號或任何其他特殊字元,則在沒有此函式的情況下會出現語法錯誤。