SELECT 1 FROM [SystemEventLog]

时间:2014-03-10 09:50:00

标签: sql sql-server sql-server-2008 sql-server-2005 sql-server-2008-r2

我正在使用SQL Server 2008 R2

我有一个每天执行存储过程的SQL作业8:00 AM

在存储中,有一个声明:

    DECLARE @midnight datetime,
    @startTime datetime = GETUTCDATE();

    -- Has this stored procedure already run for today?
    IF EXISTS (SELECT 1 FROM [SystemEventLog] WHERE [CreatedDateTime_UTC] >= CAST(@midnight AS DATE) AND [CreatedDateTime_UTC] < DATEADD(DD, 1, CAST(@midnight AS DATE)))
    BEGIN
         RETURN
    END


-- log that this storedproc ran
DECLARE @SystemEventLogId int 
INSERT INTO [dbo].[SystemEventLog] ( [EventType_Id], [StoredProcName], [Details] )
VALUES( 1, 'StoredProcedureOne', null )

根据评论,此块正在检查此存储过程是否已运行,如果是,则返回。

但是我没有得到它如何检查这个程序是否已经在今天运行?

任何人都可以解释一下吗?

感谢。

1 个答案:

答案 0 :(得分:2)

打破存储过程......

SELECT 1 FROM [SystemEventLog]
    WHERE [CreatedDateTime_UTC] >= CAST(@midnight AS DATE)
      AND [CreatedDateTime_UTC] < DATEADD(DD, 1, CAST(@midnight AS DATE))

如果符合条件,这将输出一行(1无关紧要 - 它只是内容)。

然后......

IF EXISTS ( [statement] ) 
如果[statement]至少返回一行,则

为true。如果为true,则存储过程退出(通过RETURN语句);如果错误,它将继续。

您的示例中缺少的部分将位于此下方,然后它将向SystemEventLog添加一个新行 - 在以后的执行中 - 然后在当天剩余的时间内生成条件true