[英]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.