对于超越4000的字符串不能print出来的时候

 

调试存储过程时,往往可以用print将存储过程中的变量print出来,

但是print出来的字符串有一定长度限制,刚才专门试了一下,应该是4000个字符

如果超过4000个字符,超长的字符会被自动截断,这一点应该比较清楚。

 

对于超过4000的字符串没办法print出来的时候,往往可以选择select
@v_str这种方式,将后台的字符串select出来,然后粘贴出来查看

但是今天发现不好使了,

注意字符串是”aaaaa…………bbbbb”,结尾时bbbbb

我随意定义一个超级长的字符串,可以看出来len是87049,同时用select @str
给他select 出来

图片 1

 

但是我从查询结果select
@str的结果中,将这个字符串复制出来之后,字符串的长度就被截断了,我从上面select出来的结果中复制

新贴到一个查询窗口中,发现结尾不是上面定义时候的bbbbb,如截图,通过select
len这个字段,发现是长度是43677

图片 2

图片 3

 

因为今天遇到了类似的问题,调试存储过程的时候,对于存储过程中处理的字符串,因为print会被截断,那么就select出来,

然后复制select出来的结果到一个新窗口中,发现字符串结尾跟处理字符串的逻辑对不上,

比如我对字符串的处理是以分号结尾,实际上select出来然后粘贴出来查看,根本不是以分号结尾,

而处理字符串的逻辑又很简单,断定可以不会有bug,

那么肯定是从select中复制然后粘贴的时候出的错。

尼玛我一开始试了n多次啊,简直不敢相信自己的眼睛。

 

后面就干脆试一下,对于结果取len是没有问题的,长字符串select出来,然后再复制粘贴出来,中间就被截断了。

单独地复制SSMS查询窗口中原始的字符串,也是没有问题的。

 

这个怎么解释,还请高人指点一下。

 

20160920补充:

对于SSMS中查询出来的结果,retrieved有限制,最大值为65535,如下截图。

验证起来很简单,比如:设置为20个字符串,select
‘一个长于20个字符的字符串’,然后复制其结果,从grid中最多可以复制20个字符

但是这个仅仅是显示问题,不会影响到其逻辑运算。

图片 4

 

 

 

相关文章