2012-04-12 83 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