Sql Server在while循环期间打印受影响的行

Kev*_*vin 6 sql-server printing stored-procedures sql-server-2008

我有一个在sql server 2008上运行的存储过程循环遍历大约5000万行的表,一次删除一天的记录(每天大约25,000条记录).我希望能够在流程通过print语句运行到消息窗口时观察到这种情况.我希望每次每天都有一次删除操作时能够看到一条消息.有没有办法做这样的事情?程序大致如下:

WHILE EXISTS(<query statement>)
BEGIN

BEGIN TRAN

DELETE
FROM  <table>
WHERE <condition>
AND <condition>

--need some sort of "rows affected" statement here

COMMIT

END
Run Code Online (Sandbox Code Playgroud)

Ada*_*Dev 23

不幸的是,PRINT语句输出被假脱机并且不会立即写入输出.解决这个问题的方法是使用RAISERROR,如下所示:

RAISERROR ('MY MESSAGE', 0, 1) WITH NOWAIT
Run Code Online (Sandbox Code Playgroud)

特别是你想要的:

    DECLARE @Msg VARCHAR(200)

    WHILE EXISTS(<query statement>)
    BEGIN
    BEGIN TRAN

    DELETE
    FROM  <table>
    WHERE <condition>
    AND <condition>

    SELECT @Msg = CAST(@@ROWCOUNT AS VARCHAR(10)) + ' rows affected'
    RAISERROR (@Msg, 0, 1) WITH NOWAIT

    COMMIT
    END
Run Code Online (Sandbox Code Playgroud)

我还倾向于在消息中包含当前时间,以便我可以记录时间进度.

  • 确保查看SSMS中的"消息"选项卡以查看RaiseError的输出.RaiseError输出仅在查询完成后显示在结果选项卡中. (2认同)