SQL Server Management Studio的“消息”输出窗口是否有大小限制?

时间:2010-12-03 10:34:40

标签: sql-server ssms

如果使用PRINT或RAISERROR输出消息,则窗口有缓冲区大小限制,如果是,则可以更改。

我到处都看,但看不到树上的木头!

Calification:在开始删除之前显示的消息之前,我对输出窗口可以显示的数据量感兴趣。它可能只是继续前进但必须有一些限制,不是吗?

2 个答案:

答案 0 :(得分:4)

我认为除了机器中可用内存所施加的任何限制外,没有其他限制。如果有一个它足够高,以满足大多数潜在的用例。以此SQL为例:

declare @count int 
set @count = 0 
while (@count < 80000) 
begin
 print cast(@count as varchar(10)) + replicate('x', 7900)
 set @count = (@count + 1) 
end

此行打印80000行~7900个字符。在我的测试中,每行都显示在消息输出窗口中(需要一段时间才能运行)。所以,如果有限制,它就会很高。

修改

值得一提的是,如果输出字符串太长,PRINT和RAISERROR都会截断。例如

print replicate('x', 7997) + 'end' -- Output : ...xxxxend
print replicate('x', 7998) + 'end' -- Truncated Output : ...xxxxen

declare @err varchar(max)
set @err = replicate('x', 2044) + 'end' -- Total length 2047
raiserror(@err, 1, 0) -- Output : ...xxxxend

set @err = replicate('x', 2045) + 'end' -- Total length 2048
raiserror(@err, 1, 0) -- Output Truncated with ellipses : ...xxxx...

答案 1 :(得分:0)

从回忆中,消息和结果窗口将继续尝试显示他们给出的所有内容,直到SSMS达到硬资源限制(例如内存)并显示错误消息。我相信它会丢弃服务器返回的任何其他消息/结果。

我认为可以控制的输出中唯一的限制是从long(var)char和XML列显示的字符数。 (在SSMS 2008中,65535和2MB是相应的默认值。)