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)
我还倾向于在消息中包含当前时间,以便我可以记录时间进度.