2010-12-03 158 views
3

如果使用PRINT或RAISERROR输出消息存在窗口的缓冲区大小限制,并且如果可以更改。SQL Server Management Studio的“消息”输出窗口是否有大小限制?

我到处看过,但看不到树木!

确定数量:我在输入窗口可以显示的数据量中进行积分,然后再开始删除先前显示的消息。这可能是它继续前进,但必须有一些限制,不是吗?

+1

这个问题的动机是什么?如果你不想消息被缓冲,你可以使用`RAISERROR('foo',0,1)WITH NOWAIT`。不知道这对你有没有帮助! – 2010-12-03 11:20:31

回答

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个字符。在我的测试中,每行显示在消息输出窗口中(需要一段时间才能运行)。所以如果有一个限制,它是相当高的。

编辑

还值得一提的是,如果输出字符串太长印刷和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... 
0

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

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

2

更正: 从印象里,信息和成果的窗口将继续努力,以显示他们给予的一切,直到SSMS打硬资源限制(例如内存),并显示一条错误消息。 然后关闭,回滚连接。

相关问题