3

PRINTによる出力のバッファリングを避けるために、PRINTを使用するのではなく、RAISERRORを使用してストアドプロシージャから進行状況の出力を生成しています。RAISERROR が 500 印刷後にバッファリングを開始することを発見しました。この動作を回避する方法はありますか? 以下のクエリは、私の要点を示しています。

DECLARE @i INT = 0

WHILE @i < 50000
BEGIN
    SET @i = @i + 1 

    RAISERROR('%i prints', 0,1 , @i) with nowait;

    IF @i > 500  --<--after 500 prints RAISERROR starts buffering 50 prints before flushing.
    WAITFOR DELAY '00:00:00.050';
END; 
4

2 に答える 2

0

Erland Sommerskandは次のように報告しています。

ただし、Mgmt Studio は 500 メッセージを超えると NOWAIT メッセージのバッファリングも開始することに注意してください。

これは、SQL 2000 に付属する古いクエリ アナライザでは発生しません。

QA を利用できない場合は、SSMS の代わりに SQLCMD.EXE を試すことができます。たぶん、500以降はバッファリングしないでしょう。

于 2014-09-09T14:07:44.423 に答える
0

これをLINQpadで試したことを覚えています.linqpadは生のSQLを受け入れることができ、バッファはありませんでした.

もう一度試してみたところ、確認できました。

あなたはlinqpadを使うことができますか?

于 2014-09-09T14:19:22.430 に答える