我正在使用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 )
根据评论,此块正在检查此存储过程是否已运行,如果是,则返回。
但是我没有得到它如何检查这个程序是否已经在今天运行?
任何人都可以解释一下吗?
感谢。
答案 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