我正在使用RAISERROR从存储过程中生成进度输出,而不是使用PRINT,以避免PRINT对输出进行缓冲。现在,我发现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;

最佳答案

Erland Sommerskand reported


但是,请注意,Mgmt Studio也将开始缓冲NOWAIT消息
500条消息之后。

SQL附带的旧查询分析器不会发生这种情况
2000


如果没有可用的质量检查,则可以尝试使用SQLCMD.EXE而不是SSMS。可能在500之后将不再缓冲。

关于sql - 使用NOWAIT缓冲进行RAISERROR的解决方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25746625/

10-10 18:51