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

sqlserver 动态sql执行execute和sp_executesql,用动态SQL语句给变量赋值

動態語句的使用方法(exec/sp_executesql)

是否可以使用 sp_executesql 创建视图?

使用 sp_executesql 的非最佳执行计划