簡體   English   中英

在使用更新后觸發器觸發其他列的更新后,如何將日期列中的特定行更新為今天?

[英]How to update specific row in datecolumn to date today after update on other column using after update trigger?

當使用T-SQL中的更新后觸發器更新(未插入)Column CustomerProductID時,如何將Date列DateMod更新為今天的日期?

一些背景信息:表已經包含產品列表(鍵列Itemcode ),一旦收到CustomerProductID,它將特定行(產品)的列從NULL更改為整數值。 此更新是將行(產品)的DateMod列更新為今天的日期的觸發器。 我正在使用SSMS 2008,並且具有類似以下代碼的內容,它更改了整個日期列,而不是更新行的特定日期字段:

 CREATE TRIGGER trigger_name
   ON Table1
   AFTER UPDATE
AS 
BEGIN
      SET NOCOUNT ON;
      IF UPDATE (CustomerProductID) BEGIN
        Update Table1
        SET DateMod=GETDATE() 
      END
END

我已經閱讀了一些使用old.value和new.value或使用where存在的解決方案(從插入/更新中選擇)的解決方案,但是它如何工作? 如果兩種方法都可行,在這種情況下哪一種是最有利的? 非常感謝!

我更喜歡將其作為before update觸發器(在更新后的觸發器中進行更新會提示無限循環,在某些數據庫中是不允許的)。 但是SQL Server不支持。

無論如何,正確的語法是使用inserted聯接回原始表:

CREATE TRIGGER trigger_name
   ON Table1
   AFTER UPDATE
AS 
BEGIN
      SET NOCOUNT ON;
      IF UPDATE(CustomerProductID) BEGIN
        Update t1
            SET DateMod = GETDATE() 
            FROM Table1 t1 join
                 Inserted i
                 ON Table1.PrimaryKeyColumn = i.PrimaryKeyColumn
      END
END

更改代碼,使PrimaryKeyColumn是正確的主鍵列。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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