【问题标题】:Passing parameters into sp_executesql将参数传递到 sp_executesql
【发布时间】:2015-11-03 08:05:11
【问题描述】:

我有这个简单的动态 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-server tsql dynamic-sql sp-executesql


    【解决方案1】:

    您不能对表名或列名使用参数。您必须修改实际的 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 - 当您使用参数时也会发生这种情况。

    【讨论】:

      猜你喜欢
      • 2015-12-07
      • 1970-01-01
      • 1970-01-01
      • 2011-05-14
      • 1970-01-01
      • 1970-01-01
      • 2023-03-30
      • 2013-01-31
      • 2016-09-02
      相关资源
      最近更新 更多