执行以字符串形式提供的 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 变量包含空格,括号或任何其他特殊字符,则在没有此函数的情况下会出现语法错误。