如何从表列格式化SQL查询?

如何从表列格式化SQL查询?,sql,sql-server,tsql,code-formatting,Sql,Sql Server,Tsql,Code Formatting,我将一些SQL查询存储在表中的varchar列中。然后我在我的Birts报告数据集中执行它们,这没关系,但有时我需要检查SQL查询,但是当我从SQL编辑器复制时,我在一行中得到查询。。我想知道如何获取该列并提供一些缩进,就像在将其插入表中之前一样。我过去使用过该工具,它工作得非常好: 我在 ——在打印语句的4000/8000字符限制范围内工作 创建过程dbo.LongPrint(@string nvarchar(max)) 作为 不计较 设置@string=rtrim(@string) 声明@c

我将一些SQL查询存储在表中的
varchar
列中。然后我在我的Birts报告数据集中执行它们,这没关系,但有时我需要检查SQL查询,但是当我从SQL编辑器复制时,我在一行中得到查询。。我想知道如何获取该列并提供一些缩进,就像在将其插入表中之前一样。

我过去使用过该工具,它工作得非常好:

我在

——在打印语句的4000/8000字符限制范围内工作
创建过程dbo.LongPrint(@string nvarchar(max))
作为
不计较
设置@string=rtrim(@string)
声明@cr字符(1),@lf字符(1)
设置@cr=char(13)
设置@lf=char(10)
声明@len int、@cr_index int、@lf_index int、@crlf_index int、@has_cr_和@u lf位、@left-nvarchar(4000)、@reverse-nvarchar(4000)
设置为@len=4000
而(len(@string)>@len)
开始
设置@left=left(@string,@len)
设置@reverse=reverse(@left)
设置@cr_索引=@len-charindex(@cr,@reverse)+1
设置@lf_索引=@len-charindex(@lf,@reverse)+1
设置@crlf\U index=当@cr\U index<@lf\U index然后@cr\U index else@lf\U index end时的情况
设置@has\u cr\u和\u lf=当@cr\u index<@len和@lf\u index<@len时的大小写,然后1或0结束
向左打印(@string,@crlf_索引-1)
设置@string=right(@string,len(@string)-@crlf\u索引-@has\u cr\u和\u lf)
结束
打印@string

它的功能非常好。

试试我们的免费在线工具-

yap,但有时会失败,我现在正在尝试,但cte和评论都失败了。
-- Works around the 4000/8000 character limit of the print statement
CREATE PROCEDURE dbo.LongPrint( @string nvarchar(max) )
AS
SET NOCOUNT ON

set @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