【问题标题】:Must declare the scalar variable "@Value" [duplicate]必须声明标量变量“@Value”[重复]
【发布时间】:2014-03-06 14:34:33
【问题描述】:

请看下面的代码:

declare @value as nvarchar(100)
declare @sql as nvarchar(100)
set @Value = ' WHERE ID=@Value'

set @sql='SELECT * FROM person ' + @Value
EXECUTE sp_executesql @sql

我得到的错误是:必须声明标量变量“@Value”。这是为什么呢?

【问题讨论】:

  • “重复”问题都与这个问题无关。第一个处理参数化无法参数化的事物(列访问和表访问)。至于第二个,可变套管在这里是一个红鲱鱼。

标签: sql sql-server tsql


【解决方案1】:

动态SQL是单独执行的,所以变量不可用(设置@Value = 'WHERE ID=@Value'),所以需要sp_executesql自己声明。

你可以按如下方式传递它们:

EXECUTE sp_executesql @sql, '@Value nvarchar(100)', @Value = @Value;

另请参阅此问题:How to set value to variable using 'execute' in t-sql?

【讨论】:

  • 你确定吗?据我所知,它们是基于会话的。多年来没有使用动态 SQL,但对我来说这听起来完全没问题。
  • 当然,这就是 sp_executesql 接受参数定义的全部目的。 technet.microsoft.com/en-us/library/ms175170.aspx
猜你喜欢
  • 2018-09-04
  • 1970-01-01
  • 1970-01-01
  • 2020-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-03
  • 1970-01-01
相关资源
最近更新 更多