[英]SQL server insert trigger
我是SQL Server的新手,我有一个任务来创建一个触发器,该触发器将在逾期付款中将客户的状态插入/更新为“已阻止”。
我如何才能在触发器中检查说出类似以下内容的内容?
if getdate() > dateDue
then update status = 'Blocked'
end if
非常感谢您的提前帮助
这是Martin建议创建非持久计算列的实现 :
ALTER TABLE dbo.YourTable
ADD Status AS CASE WHEN DueDate < GETDATE() THEN 'Blocked' ELSE 'Not Blocked' END
我没有时间进行真正的测试,因此可能存在一些问题/语法问题,但是这里有一些应该可以使您了解如何解决的问题。 基本上,只要更改“ dateDue”的值,触发器就应该触发。 如果更新了多个记录,它应该遍历“插入”值,对于“插入”中的每个记录,如果新的“ dateDue”值大于当前时间,则更新该记录并将状态设置为“封锁”。
CREATE TRIGGER myTriggerName
ON myTable
AFTER INSERT, UPDATE
AS
IF UPDATE(dateDue)
BEGIN
DECLARE @currPk INT
DECLARE @currDateDue DATETIME
DECLARE @today DATETIME
DECLARE inserted_Cursor CURSOR FOR
SELECT myTableID, dateDue, GETDATE() FROM Inserted
OPEN inserted_Cursor;
FETCH NEXT FROM inserted_Cursor INTO @currPk, @currDateDue, @today
WHILE @@FETCH_STATUS = 0
BEGIN
IF(@currDateDue < @today)
UPDATE myTable SET status = 'Blocked' WHERE myTableID = @currPk
FETCH NEXT FROM inserted_Cursor INTO @currPk, @currDateDue, @today
END;
CLOSE inserted_Cursor;
DEALLOCATE inserted_Cursor;
END;
如果要在DueDate变为<今天(今天)时更新此状态,而不是仅在修改记录的DueDate时更新此状态,则应通过SQL Sever代理安排存储过程,并让其运行简单的更新来设置状态对于DueDate <今天的任何记录。 您可以每晚,每小时或任何您需要的速度运行。
如果您不想运行Agent,则可以使用为其编写代码的Windows服务(设置起来比较麻烦),甚至是从Windows Task运行的批处理文件来完成,但显然Agent是最方便的方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.