如果使用PRINT或RAISERROR输出消息存在窗口的缓冲区大小限制,并且如果可以更改。SQL Server Management Studio的“消息”输出窗口是否有大小限制?
我到处看过,但看不到树木!
确定数量:我在输入窗口可以显示的数据量中进行积分,然后再开始删除先前显示的消息。这可能是它继续前进,但必须有一些限制,不是吗?
如果使用PRINT或RAISERROR输出消息存在窗口的缓冲区大小限制,并且如果可以更改。SQL Server Management Studio的“消息”输出窗口是否有大小限制?
我到处看过,但看不到树木!
确定数量:我在输入窗口可以显示的数据量中进行积分,然后再开始删除先前显示的消息。这可能是它继续前进,但必须有一些限制,不是吗?
我不认为除了机器可用内存强加的任何限制之外,还有其他限制。如果有一个足够高,可以满足大多数潜在用例。以此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...
从回忆中,消息和结果窗口将继续尝试显示给出的所有内容,直到SSMS遇到硬资源限制(例如内存)并显示错误消息。我相信它会丢弃服务器返回的任何进一步消息/结果。
我相信有任何控制的输出中的唯一限制是从long(var)char和XML列显示的字符数。 (在SSMS 2008中,65535和2MB是相应的默认值)。
更正: 从印象里,信息和成果的窗口将继续努力,以显示他们给予的一切,直到SSMS打硬资源限制(例如内存),并显示一条错误消息。 然后关闭,回滚连接。
这个问题的动机是什么?如果你不想消息被缓冲,你可以使用`RAISERROR('foo',0,1)WITH NOWAIT`。不知道这对你有没有帮助! – 2010-12-03 11:20:31