如果使用PRINT或RAISERROR输出消息,则窗口有缓冲区大小限制,如果是,则可以更改。
我到处都看,但看不到树上的木头!
Calification:在开始删除之前显示的消息之前,我对输出窗口可以显示的数据量感兴趣。它可能只是继续前进但必须有一些限制,不是吗?
答案 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是相应的默认值。)