2010-12-03 153 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打硬資源限制(例如內存),並顯示一條錯誤消息。 然後關閉,回滾連接。

相關問題