2012-12-20 38 views
1

我有一个SQL存储过程,只有在查找表值具有今天的日期时才需要执行。需要根据查找表值执行的SQL存储过程

如果不是,那么它应该在30分钟后以相同的标准再次运行。

我该怎么做?

查找表只有一个日期行值= '12 -14-2012'。这将通过另一个过程来改变。

+0

*** *** SQL只是*结构化查询语言* - 许多数据库系统中使用的语言,但没有AA数据库产品...很多东西都是特定于供应商的 - 所以我们真的需要知道你使用的数据库系统**(和哪个版本)...... –

回答

0

像这样的东西可以为你做。请注意,此代码不会执行,您需要用您的值替换项目。

DECLARE @Today DATE 
SET @Today = GETDATE() 

IF EXISTS (SELECT 'x' FROM MyTable WHERE CAST(ColumnName as DATE) = @Today) 
    BEGIN 
     EXEC Sproc Here 
    END 
+0

不错。但是,我的问题是,比方说,当它匹配条件时运行一次,我如何确保SP下次不再运行。 – Peter

+0

你总是可以在你的表中放置一个标志,表明它已经执行。然后你可以检查那个标志。比如BIT字段,就像HasExecuted BIT NULL,如果设置为1,那么你知道它已经被执行了那个特定的记录。 – CodeLikeBeaker

+0

好的,很好,在我成功运行作业/ sp并将该位更改为1后,明天会发生什么?为了新的开始,我是否已将这一点设置为0? – Peter

0

在高层次上,您可以使用SQL Server代理程序来安排proc。要决定是否要运行,你可以把这样的事情在proc

IF EXISTS(SELECT * FROM LOOKUP WHERE colname = convert(varchar, getdate(), 110)) 
BEGIN 
    --do stuff 
END 
+0

谢谢。我知道这会起作用。我必须安排一些事情来确保这个运行一次。所以,这是它的样子。早上8点这个工作运行并且条件不匹配,所以sp没有运行。现在上午9点,它找到了比赛并跑步。上午10点它不应该运行,因为它已经在上午9点成功运行。 – Peter

+0

成功运行后,为什么不直接从查找表中删除一行(或只是清除值)? –

+0

谢谢你的所有想法。 – Peter