exec sp_executesql @sql +@sql1 +@sql2+N' ,@OutCountValue float output',@OutCountValue output

解决方案 »

  1.   

    declare @sql3 nvarchar(4000)
    set @sql3=@sql +@sql1 +@sql2
    exec sp_executesql @sql3, N'@OutCountValue float output',@OutCountValue output
      

  2.   

    这样不行啊,@sql3nvarchar(4000)这个最大值就是4000,不能装下所有的sql语句啊
      

  3.   

    你是SQL 2005么?
    改用 NVARCHAR(MAX) 试试看
      

  4.   

    declare @sql3 nvarchar(max)
    set @sql3=@sql +@sql1 +@sql2
    exec sp_executesql @sql3, N'@OutCountValue float output',@OutCountValue output
      

  5.   

    同志们啊,max最大值就已经是4000了。要不然我不用费那么大劲做语句拼接了。
      

  6.   

    应该是问题是这样子的:
    (1)sql语句远大于4000,应该是3个4000;
    (2)有输出参数且参数类型是float,有输出参数的时候,就需要采用
    sp_executesql 这个。
    但是exec sp_executesql @sql +@sql1 +@sql2, N'@OutCountValue float output',@OutCountValue output这样写,会提示sp_executesql @sql +@sql1 +@sql2部分的+前后有语法错误。而且刚才2楼和3楼的朋友的方法也不行,因为2楼的那个依然是“+前后有语法错误”;而3楼的是因为最大值就是4000,即使用max还是4000,所以并不能将拼接语句都放在@sql3里。
      

  7.   


    写个存储过程,SQL参数传进去执行,返回结果
      

  8.   

    我写的就是存储过程呀。。现在是存储过程中的sql语句过长(3个4000还要多),没有办法执行了的问题。
      

  9.   

     @sql1+@sql2+@sql3   这三个类型 都应该为  nvarchar 类型的
      

  10.   

    不错,给的 变量都应该是 varchar的
    他们拼接在一起,
    正好我今天 上午遇到了。
      

  11.   

    @sql超长,肯定是其中某个部分超长,把这部分分离出来,作为参数(或多个参数)执行就可以了
    @p //超长参数
    @sql =N'**********@tp*********'
    execute sp_executesql 
    @sql, 
    N'@tp nvarchar(max)',
    @tp=@p