使用Print()打印超过8000个字符

ano*_*217 3 t-sql dynamic-sql

如何打印包含超过 8000 个字符的字符串(例如动态查询)?

Declare @sql varchar(max)
set @Qry='....(more than 8000 char)'
Print (@Qry)
Run Code Online (Sandbox Code Playgroud)

上面仅打印@Qry的前8000个字符并截掉其余部分。

Jef*_*fUK 7

问题是 VARCHAR(MAX) 最多可容纳 2GB 数据,但 print() 只能将 8000 个字符打印到终端。所以你必须将字符串分成 8000 个字符块并单独打印它们。例如

declare @test varchar(max);
declare @loop int = 1;
declare @length int =0;
declare @printed int =0;

/*build an exceptionally long string.*/
set @test= 'select ''1000000000000000000000000000000000000000000''';

while @loop < 1001 
begin
     set @test = @test + ',''12345678901234567890123456789012345678901234567890123456789012345678901234567890''';
     set @loop = @loop + 1;

end;
/*!build an exceptionally long string.*/

set @length = len(@test);
while @printed < @length
BEGIN
    print(substring(@test,@printed,8000));
    set @printed = @printed + 8000; 
END
Run Code Online (Sandbox Code Playgroud)

  • 如果尝试打印“NVARCHAR”,则循环次数为 4000,而不是 8000,因为“NVARCHAR”每个字符占用 2 个字节而不是 1 个字节,并且打印的限制仍然是 8000 个字节(4000 个字符)。 (2认同)