参考:SQL Server
我有一个带有while
循环的存储过程,我想在每500次循环后打印一些消息。
所以,我写了 -
CREATE spxxx
AS
BEGIN
BEGIN TRAN
DECLARE @counter = 0;
WHILE <somecondition>
SET @counter = @counter + 1;
IF @counter % 50 = 0
BEGIN
PRINT @counter;
END
END
COMMIT TRAN
END -- End spxxx
但是一旦proc结束,它就会打印所有消息。我希望它在运行时打印消息。
答案 0 :(得分:27)
我确定您可以使用RAISERROR ... WITH NOWAIT
如果使用严重性10,则不是错误。这也提供了一些方便的格式,例如%s,%i,你也可以使用状态来跟踪你的位置。
答案 1 :(得分:2)
SQL Server在执行一批语句后返回消息。通常,您使用SQL GO
来指示批处理的结束并检索结果:
PRINT '1'
GO
WAITFOR DELAY '00:00:05'
PRINT '2'
GO
WAITFOR DELAY '00:00:05'
PRINT '3'
GO
但是,在这种情况下,您想要立即返回的print语句位于循环的中间,因此print语句不能在它们自己的批处理中。我知道的唯一命令将在批处理中间返回RAISERROR (...) WITH NOWAIT
,gbn在我输入时将{{3}}作为答案提供。
答案 2 :(得分:0)
我可以问一下这个设施的长期需求 - 它是否用于减少目的?
如果是这样,那么您可能需要考虑使用适当的调试器,例如Visual Studio中的调试器,因为这允许您以更加可控的方式逐步执行该过程,并避免不断添加/删除PRINT程序声明。
我的意见,但我更喜欢调试方法 - 代码和数据库。