2012-04-12 84 views
19

考慮下面的存儲過程..如何查看運行SQL存儲過程的進度?

CREATE PROCEDURE SlowCleanUp (@MaxDate DATETIME) 
AS 
BEGIN 
    PRINT 'Deleting old data Part 1/3...' 
    DELETE FROM HugeTable1 where SaveDate < @MaxDate 

    PRINT 'Deleting old data Part 2/3...' 
    DELETE FROM HugeTable2 where SaveDate < @MaxDate 

    PRINT 'Deleting old data Part 3/3...' 
    DELETE FROM HugeTable3 where SaveDate < @MaxDate 

    PRINT 'Deleting old data COMPLETED.' 
END 

假設每個delete語句需要很長的時間進行刪除,但我喜歡看這個存儲過程的進展情況時,我在SQL Management Studio中運行它。換句話說,我喜歡看到PRINT語句的輸出以查看我在任何給定時間的位置。但是,我似乎只能在整個運行結束時看到PRINT輸出。有沒有辦法讓我可以實時看到PRINT輸出?如果沒有,有沒有其他方法可以看到正在運行的存儲過程的進度?

回答

31

如果使用RAISERROR 10或更少的嚴重性,並使用NOWAIT選項,它會立即發送一條信息性消息給客戶端:

RAISERROR ('Deleting old data Part 1/3' , 0, 1) WITH NOWAIT

+0

感謝,這正是我所需要的! :) – 2012-04-13 03:44:50

6

是的,你應該能夠得到消息立即打印,如果你使用RAISERROR:

RAISERROR('Hello',10,1) WITH NOWAIT