簡體   English   中英

SQL Server插入觸發器

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM