65.9K
CodeProject 正在变化。 阅读更多。
Home

SQL 字符串打印

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.84/5 (8投票s)

2007 年 5 月 22 日

CPOL
viewsIcon

40083

长 SQL 查询打印。

引言

长查询会带来更多问题,调试或测试它们比短查询更复杂。

想象一下,你编写了一个包含 nvarchar 值的过程,并且查询在过程的末尾执行。

让我来演示一下

SET @SQLResult = @SQLResult + 'SELECT TOP(' + 
   Cast(@PageRowCount as nvarchar(20)) + ') #t_table.*, 
        @TotalRecordCount AS TotalRecordCount FROM #t_table ' 
SET @SQLResult = @SQLResult + ' INNER JOIN #OrderTable ON 
                 #OrderTable.NoticeBoardId = #t_table.NoticeBoardId ' 
SET @SQLResult = @SQLResult + ' where #OrderTable.rowNum > 
                 LTRIM(STR(' + convert(varchar,@CurrentRecordId) + ' )) ' 
SET @SQLResult = @SQLResult + ' ORDER BY #OrderTable.rowNum ASC ' 
Exec @SQLResult

如果在存储过程执行过程中发生错误,我们可以通过编写如下代码来检查它

print @SQLResult

但是,如果 @SQLResult 变量的大小超过 4000 个字符,它会被截断并且无法完全显示。 因此,应该使用一个过程。

exec Helper_LongPrint @SQLResult

Helper_LongPrint 过程的脚本是

CREATE PROCEDURE dbo.Helper_LongPrint( @string nvarchar(max) )AS SET 
   NOCOUNT ONset @string = rtrim( @string )declare @cr char(1), 
   @lf char(1)set @cr = char(13)set @lf = char(10) 
declare @len int,
@cr_index int, @lf_index int, @crlf_index int, 
@has_cr_and_lf bit, @left nvarchar(4000), @reverse nvarchar(4000) 
set @len = 4000 
while ( len( @string ) > @len ) begin 
set @left = left( @string, @len )
set @reverse = reverse( @left )
set @cr_index = @len - charindex( @cr, @reverse ) + 1
set @lf_index = @len - charindex( @lf, @reverse ) + 1
set @crlf_index = case when @cr_index < @lf_index 
then @cr_index 
else @lf_index end 
set @has_cr_and_lf = case when @cr_index < @len and @lf_index < @len 
then 1 
else 0 end 
print left( @string, @crlf_index - 1 ) 
set @string = right( @string, len( @string ) - @crlf_index - @has_cr_and_lf ) 
end
print @string

如有任何问题,请随时提问:ykocdag80@yahoo.com

© . All rights reserved.