我正在使用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/