日期:2014-05-18  浏览次数:20528 次

如何让 EXEC 后面的SQL语句字符串长度能超过8000个字符?
EXECUTE,按照联机手册上的说法

[N] 'tsql_string '

是一个常量,tsql_string   可以是   nvarchar   或   varchar   数据类型。如果包含   N,则该字符串将解释为   nvarchar   数据类型,最大值为服务器的可用内存。如果字符串长度超过   4,000   个字符,则把多个局部变量串联起来用于   EXECUTE   字符串。

也就是说如果我的SQL语句(varchar类型)超过8000个字符的话,我可以采用拼凑:
exec(@str1+@str2)
是这个意思吧?

但是我在实际使用时确不行,我就是采用:
EXEC   'str1 '   +   'str2 '   +   'str3 '   +   ...   +   'strn '
运行报错,结果我改成:
PRINT   'str1 '   +   'str2 '   +   'str3 '   +   ...   +   'strn '
发现,输出的语句是截取了的,并不是我的完整的SQL语句(刚好是我的SQL语句的前8000个字符),所以这样当然会报错。

请问我这个该怎么办呀?我这是一个动态建存储过程的语句,语句代码肯定超过8000个字符了,我该怎么办?谁能帮帮我呀?

问题解决了我可以另外加分的!!!
谢谢!!!

------解决方案--------------------
帮你顶
------解决方案--------------------
也就是说如果我的SQL语句(varchar类型)超过8000个字符的话,我可以采用拼凑:
exec(@str1+@str2)
是这个意思吧?


但是我在实际使用时确不行,我就是采用:
EXEC 'str1 ' + 'str2 ' + 'str3 ' + ... + 'strn '
---------------------------------------------------

LZ 好像不是这样写的吧,()一定要加上,

运行报错,不知道是什么错误,如果EXEC 里面带有多个GO是不行的


另外用 PRINT 一次最多就只能打印出8000个字符,不管怎么写都没用
------解决方案--------------------
replace,left,right,substring等字符串函数,不能直接用在EXEC里面。