vc的ado调用存储过程。情况是这样的: 
在我的存储过程中,用了两种执行方法,分别是: 
exec (@sql) 
@sql这样声明:DECLARE @Sql varchar(4000) 
以及 
exec sp_executesql @sql 
@sql这样声明:DECLARE @Sql nvarchar(4000) 当字符串过长的时候,我会用第一种方法,并且将字符串拼接: 
exec (@sql + @sql1 + @sql2) 现在遇到了字符串过长,并且需要输出float类型的参数。 
我只这样写: 
SQL codeexec sp_executesql @sql +@sql1 +@sql2, N'@OutCountValue float output',@OutCountValue output
但出现错误提示: 
“消息 102,级别 15,状态 1,过程 GetAllAudienceRating,第 75 行 
'+' 附近有语法错误。”

解决方案 »

  1.   

    sp_executesql 的参数1不能用表达式
    解决方法:
    1、如果2005或者以上,使用DECLARE @Sql nvarchar(max) 
    2、如果2000,那只能分几次执行了,碰到需要传递数据的,只能用临时表传递,比较麻烦,不举例了
      

  2.   

    CSDN又抽了
    看到回复成功看不到回复
      

  3.   

    我用了DECLARE @Sql nvarchar(max)
    还是就到4000的大小的地方就打住,不能写入了。
    是这样写的。declare @sql4 nvarchar(max)
    set @sql4 = @sql+@sql2+@sql3
    exec sp_executesql @sql4 ,N'@OutCountValue float output',@OutCountValue output然后@sql+@sql2+@sql3这三个都定义成nvarchar(max)
    是这样吗