如何在存储过程运行时使用PRINT语句跟踪执行?

时间:2009-08-12 06:52:02

标签: sql-server tsql

参考: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结束,它就会打印所有消息。我希望它在运行时打印消息。

3 个答案:

答案 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 NOWAITgbn在我输入时将{{3}}作为答案提供。

答案 2 :(得分:0)

我可以问一下这个设施的长期需求 - 它是否用于减少目的?

如果是这样,那么您可能需要考虑使用适当的调试器,例如Visual Studio中的调试器,因为这允许您以更加可控的方式逐步执行该过程,并避免不断添加/删除PRINT程序声明。

我的意见,但我更喜欢调试方法 - 代码和数据库。