有一条超长的动态语句(超过8000字符),为此我分成多个字符变量执行 Exec (strHead + strMid1 + strMid2 + strMid3 + strEnd),但执行是报错,用Select strHead + strMid1 + strMid2 + strMid3 + strEnd 检查发现字符串被截断,刚好在4000字符。我的问题是是否Select 和 Exec语句本身处理的字符数是有限制的?如果受限,我的超长的动态语句用什么办法执行?谢谢!

解决方案 »

  1.   

    你用的是SQL多少? 我记得现在的字符可以设置nvarchar(max)肯定够用了!
      

  2.   

    [sql server] 化解字符串不能超过8000的方法 
    http://blog.csdn.net/xys_777/archive/2010/07/14/5733196.aspx
      

  3.   

    如果不是SQL2005以上版本,建议升级,早晚的事,不如早点享受。
    如果是SQL2005以上版本,不用说了,VARCHAR(max)或nvarchar(max) 一般够用了。
    如果是SQL2000,参考:邹建:化解字符串不能超过8000的方法及交叉表的处理
      

  4.   

    好长可以 Exec (strHead + strMid1 + strMid2 + strMid3 + strEnd)啊
      

  5.   

    但执行是报错,用Select strHead + strMid1 + strMid2 + strMid3 + strEnd 检查发现字符串被截断,刚好在4000字符你SELECT 出来, 最多也就是8000,EXEC(@SQL+@SQL1+....)报什么错了???
      

  6.   

    Exec (strHead + strMid1 + strMid2 + strMid3 + strEnd)只要拼接的语法正确,以上是能运行的,每个变量可以为:varchar(8000)
      

  7.   

    这个问题还是我自己解释吧。提邹建大师的方法的人没看懂我的问题。Select strHead + strMid1 + strMid2 + strMid3 + strEnd就是邹建方法的一种。我的问题是Selelct 的字符数是受限的。我测试的结果的确如此,最多4000个字符。然而 Exec要执行的动态语句字符是不受限的(按说也是受限的,但4000以上没问题,上限多少还不知道)。我之所以Exec执行不了,还是动态语句本身有问题。