向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"的列,而不是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多次-这就是当你使用你的参数时发生的事情。

相关内容

  • 没有找到相关文章

最新更新