2011-03-16 177 views
2

为了完成这项任务,我应该研究什么?如何自动运行SQL查询?

我使用MS-SQL & VB.Net

我有一个存储startdateenddate SQL表。我想每隔10分钟在该表上运行一次查询,以检查enddate是否大于今天,如果是,我想添加1到另一列,如果不是,我想添加0.

我该如何做到这一点?

+0

让我改述一下你的问题:你需要准确的SQL语句和每10分钟循环的脚本吗? – Raptor 2011-03-16 02:42:01

回答

1

你的问题似乎是你要求错误的东西。

这听起来像你正在寻找一个触发器来触发并更新计算的字段。所以,它听起来就像你要设置的表的数据库触发器和有触发火上插入或更新

USE [<database_name>] 
GO 

/****** Object: Trigger [dbo].[tr_<tablename>_endDateCheck] Script Date: 03/16/2011 12:42:24 ******/ 
SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 

CREATE TRIGGER [dbo].[tr_<tablename>_endDateCheck] 
    ON [dbo].[<tablename>] 
    AFTER INSERT,UPDATE 
AS 
    BEGIN 

     UPDATE [<tablename>] SET isEnded = CASE WHEN (SELECT endDate FROM inserted WHERE id = inserted.id).endDate > GetDate() THEN 1 ELSE 0 END WHERE id IN (SELECT ID FROM inserted) 

    END 
GO 

或者非常类似的东西这个反正

然后你把计划的作业将运行0001小时,更新所有这一切不得不结束日期=昨天的日期

UPDATE [<tablename>] SET isEnded = 1 WHERE isEnded = 0 AND endDate BETWEEN DATEADD(DAY, -1, GETDATE()) AND GETDATE() 

编辑记录:或者是结束日期实际上具体时间呢?

也许在这种情况下,你应该使用一个视图与视图定义选择您的数据,而不是:

SELECT *, CASE WHEN endDate > GetDate() THEN 1 ELSE 0 END AS HasEnded 
FROM [<TableName>] 

EDIT2:修复了这是不是对于包括结束日期值正确的计划作业时间价值

0

创建一个SQL Server job以运行更新查询。

UPDATE YourTable 
    SET AnotherColumn = AnotherColumn + 1 
    WHERE enddate > DATEADD(dd, DATEDIFF(dd,0,GETDATE()), 0) /* Today's date at midnight */ 
+0

感谢您的回复听起来像这正是我需要感谢您的快速回复 – Michael 2011-03-16 02:53:20

+0

@迈克尔:很高兴帮助。如果您发现这有帮助,请考虑通过点击旁边的复选标记来接受答案。 – 2011-03-16 02:55:00

0

你可以写一个SQL作业,或者如果你想要写一个服务于对数据库运行,如果你在代码更舒服或操作需要更广泛的业务规则。

+0

感谢您的答案将查找SQL作业听起来像它会从阅读几分钟到它做什么工作 – Michael 2011-03-16 02:51:51