如何自动运行SQL查询?

时间:2011-03-16 02:39:24

标签: asp.net sql vb.net

为了完成这项任务,我应该研究什么?

我正在使用MS-SQL& VB.Net

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

我怎样才能做到这一点?

3 个答案:

答案 0 :(得分: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小时运行的预定作业并更新所有具有endDate =昨天日期的记录

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

编辑:或者endDate实际上是时间特定的吗?

在这种情况下,您应该使用视图来选择数据,而不是使用视图定义:

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

Edit2:修复了计划作业的问题,该问题对于包含时间值的endDate值不正确

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

如果您更熟悉代码或操作需要更广泛的业务规则,您可以编写SQL作业,或者如果要编写针对数据库运行的服务,则可以编写SQL作业。