sp_executesql 期望语句...好吧,我给它
Posted
技术标签:
【中文标题】sp_executesql 期望语句...好吧,我给它【英文标题】:sp_executesql Expects statement... Well, I give it to it 【发布时间】:2012-04-19 11:09:35 【问题描述】:我对此程序有疑问。 这是代码
declare @sql nvarchar(4000)
set @sql = N'SELECT @resp2 = count(*) from '+ @NameTable + ' where datum = ''1'' or datum = ''2'' '
EXEC sp_executesql
@query = @sql,
@params = N'@resp2 INT OUTPUT',
@resp2 = @resp2 OUTPUT
"过程需要参数'@statement'类型 'ntext/nchar/nvarchar'。”
我没有发表声明吗? (@sql)
我要做的就是在执行过程中为@resp2 设置一个值。
【问题讨论】:
对我来说很好。确定您查看的是正确的代码? 我花了 10 分钟用 if 的 cmets 分隔每一段代码,问题似乎就在这里。除此之外,其他任何代码都不会产生服务器发送的错误。 :// 也适合我。我相信 - 不知何故 - 在你的原始代码中 @sql 不是 nvarchar 而是 varchar。 你说得对,尼古拉。 @SQL 是 varchar。它会改变这段代码中的任何内容吗? sp_executesql 与 nvarchar 一起使用。只需将 @sql 声明为 one,应该不会有任何不良影响。但是,如果您担心副作用,请在 sp_executesql 之前声明@sqln
并将 @sql
分配给它。
【参考方案1】:
根据the manual,您应该为名为@statement
的参数提供一个值,但您将其提供为@query
。
应该是这样的:
declare @sql nvarchar(4000)
set @sql = N'SELECT @resp2 = count(*) from '+ @NameTable + ' where datum = ''1'' or datum = ''2'' '
EXEC sp_executesql
@statement = @sql,
@params = N'@resp2 INT OUTPUT',
@resp2 = @resp2 OUTPUT
只要按照说明书操作就行了。
【讨论】:
【参考方案2】:您的代码在 SQL2008 R2 上运行良好。你在运行什么版本?您可以尝试将最后一行替换为:
exec (@sql)
【讨论】:
以上是关于sp_executesql 期望语句...好吧,我给它的主要内容,如果未能解决你的问题,请参考以下文章
[转]使用exec和sp_executesql动态执行SQL语句
在 IF 语句和 WHILE 循环中执行 sp_executesql