Sql server 将参数传递到sp_executesql
我有以下简单的动态SQL代码:Sql server 将参数传递到sp_executesql,sql-server,tsql,dynamic-sql,sp-executesql,Sql Server,Tsql,Dynamic Sql,Sp Executesql,我有以下简单的动态SQL代码: declare @cmd nvarchar(100) declare @paramDef nvarchar(100) = N'@p nvarchar(20)' declare @p nvarchar(10) = N'SubTotal' set @cmd = N'select @p from Sales.SalesOrderHeader' exec sp_executesql @cmd, @paramDef, @p 但是,运行此命令会输出重复单词“SubTotal
declare @cmd nvarchar(100)
declare @paramDef nvarchar(100) = N'@p nvarchar(20)'
declare @p nvarchar(10) = N'SubTotal'
set @cmd = N'select @p from Sales.SalesOrderHeader'
exec sp_executesql @cmd, @paramDef, @p
但是,运行此命令会输出重复单词“SubTotal”的列,而不是SubTotal列的实际值。我没有正确地传递参数吗?不能将参数用于表名或列名。您必须修改实际的SQL:
declare @cmd nvarchar(100)
declare @p nvarchar(10) = N'SubTotal'
set @cmd = N'select ' + QUOTENAME(@p) + N' from Sales.SalesOrderHeader'
exec sp_executesql @cmd
在select语句中包含常量值是完全有效的,这与您的尝试类似(仅使用参数而不是文字值)。希望您不会(太)惊讶于这样的查询:
select 'abc' from sys.objects
只需多次返回字符串abc
,这就是使用参数时发生的情况