为了完成这项任务,我应该研究什么?
我正在使用MS-SQL& VB.Net
我有一个存储startdate
和enddate
的SQL表。我想每隔10分钟在该表上运行一个查询,以检查enddate
是否比今天更大,如果是,我想将1添加到另一列,如果不是我想添加一个0.
我怎样才能做到这一点?
答案 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作业。