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

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

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

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

但是今天发现不好使了,

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

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

关于SSMS显示select出来的数据行的疑问-LMLPHP

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

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

关于SSMS显示select出来的数据行的疑问-LMLPHP

关于SSMS显示select出来的数据行的疑问-LMLPHP

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

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

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

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

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

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

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

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

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

20160920补充:

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

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

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

关于SSMS显示select出来的数据行的疑问-LMLPHP

05-11 11:26