还是sql 2005好啊,据说没有 varchar 8000的限制。 郁闷死了,exec 执行拼接的sql语句好像有问题啊? 
print(@sqlBegin +@sql+ @sql1 + @sql2 + @sql3 + @sql4 + @sql5 + @sql6 + @sql7 + @sql8 + @sql9 + @sqlEnd) 我print出来语句是正确的, exec(  @sqlBegin + @sql1 + @sql2 + @sql3 + @sql4 + @sql5 + @sql6 + @sql7 + @sql8 + @sql9 + @sqlEnd ) 
可是exec 执行 发现结果集的数据列 总是漏掉几个, 我试验: 
(1) len(sql1) >2000,就付给 sql2,如此类推; (2)len(sql1) >3000,就付给 sql2,如此类推; (1)和(2)判断条件(>2000,>3000),
  和我期待的一样,print 得到的语句是一样的,我把print输出的语句 粘贴到 sql查询分析器中 执行是正确的 ;
  然而用
  exec(  @sqlBegin + @sql1 + @sql2 + @sql3 + @sql4 + @sql5 + @sql6 + @sql7 + @sql8 + @sql9 + @sqlEnd ) 
 (1)和(2)得到的结果集的数据列的个数竟然不一样,而且都少于我想要的列数。 完全没辙了, 请问各位大侠,除了用多个varchar 拼接sql,还有什么办法可以解决 动态sql长度> 8000 的问题??? 谢谢各位大侠!!!!!!!! 

解决方案 »

  1.   

    sql 2000 的sp4 补丁也打了,还是不行
      

  2.   

    print(@sqlBegin +@sql+ @sql1 + @sql2 + @sql3 + @sql4 + @sql5 + @sql6 + @sql7 + @sql8 + @sql9 + @sqlEnd) 
    exec(  @sqlBegin + @sql1 + @sql2 + @sql3 + @sql4 + @sql5 + @sql6 + @sql7 + @sql8 + @sql9 + @sqlEnd )
    不好意思,好像是我漏掉了一个
      

  3.   

    不好意思,exec,好像是我漏掉了一个 +@sql+
    原因好像找到了
      

  4.   

    应该不会吧,PRINT正确,EXEC会错误?
      

  5.   

    都是我的错,漏掉了一个 +@sql+ 
    搞了一上午,终于解决了,哈哈,多谢各位大侠!!!分数不多,不好意思啊
      

  6.   

    你可以采用临时表将拼接的sql语句存储起来,当然前提是你的每条sql语句不超过varchar(8000)