在SQL中,使用动态SQL是很常见的。有些复杂的计算,或是存储过程,代码很长,中间可能有多次执行SQL语句。而调试拼串的SQL语句却是件痛苦的事,很难看出来运行的语句是什么。所以我会经常使用print这个命令把运行前的语句打印到屏幕上,然后复制出来到另一个窗口进行调试、修改,这样就比较方便了。但是这个print命令有一些限制,在单字节符集下,最大只能打印打印8000个字符的长度,而在双字节字符集是4000个。
以下存储过程可以打印完整的信息,不受长度的限制。代码如下:
IF OBJECT_ID(N'sp_print_all') IS NOT NULL BEGIN DROP PROCEDURE sp_print_all END GO CREATE PROCEDURE sp_print_all (@dynamic_sql NVARCHAR(MAX)) AS DECLARE @start INT DECLARE @len INT SET @start = 1 SET @len = 4000 WHILE (@start < LEN(@dynamic_sql)) BEGIN PRINT SUBSTRING(@dynamic_sql, @start, @len) SET @start = @start + @len END PRINT SUBSTRING(@dynamic_sql, @start, @len) GO
查看更多关于SQL中print、sp_helptext的限制与扩展的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://haodehen.cn/did32657