簡體   English   中英

更新觸發器之后將不會更新-SQL Server 2008

[英]After Update Trigger will not update - SQL Server 2008

此問題適用於SQL Server 2008:

更新以下任何字段時,我都無法設置SyncRequired = 1。

我確信這很簡單,我很想念,但是我無法弄清楚。

CREATE TRIGGER [core].[updCustomersSync] ON [core].[Customers]
    AFTER UPDATE
AS
    IF ( UPDATE(Addr1)
         OR UPDATE(Addr2)
         OR UPDATE(Addr3)
         OR UPDATE(Zip)
         OR UPDATE(Contact1)
         OR UPDATE(Phone1)
         OR UPDATE(email)
         OR UPDATE(CustomerName)
       ) 
        BEGIN
            UPDATE  c
            SET     c.SyncRequired = 1
            FROM    core.Customers c
                    JOIN inserted ins ON ins.ID = c.ID
            WHERE   c.[CustomerName] <> ins.[CustomerName]
                    OR c.[Addr1] <> ins.[Addr1]
                    OR c.[Addr2] <> ins.[Addr2]
                    OR c.[Addr3] <> ins.[Addr3]
                    OR c.[Zip] <> ins.[Zip]
                    OR c.[Contact1] <> ins.[Contact1]
                    OR c.[Phone1] <> ins.[Phone1]
                    OR c.[email] <> ins.[email]
        END

您正在創建AFTER更新,因此在運行該更新之前,客戶應提前更新。 更改邏輯以使用delete而不是core.customers,它應該可以工作

正如我在評論中所建議的(和@RobertSheahan所建議的那樣),您應該使用INSERTEDDELETED表。

CREATE TRIGGER [core].[updCustomersSync] ON [core].[Customers]
    AFTER UPDATE
AS
    /*  You can omit the IF statement.  Just let the UPDATE statement below do all the work. */
    --IF ( UPDATE(Addr1)
    --     OR UPDATE(Addr2)
    --     OR UPDATE(Addr3)
    --     OR UPDATE(Zip)
    --     OR UPDATE(Contact1)
    --     OR UPDATE(Phone1)
    --     OR UPDATE(email)
    --     OR UPDATE(CustomerName)
    --   ) 
BEGIN
    UPDATE core.Customers
    SET SyncRequired = 1
    WHERE ID IN
    (
        SELECT i.ID
        --I will assume for this example that ID is unique.
        FROM INSERTED I
        JOIN DELETED d 
            ON d.ID = i.ID

        --Why all the NULL comparisons?  Well, presumably, if someone updates an existing value to NULL,
        --or an existing value is NULL and a new value is provided, you want to know.  Right?
        WHERE   d.[CustomerName] <> i.[CustomerName] OR (d.[CustomerName] IS NULL AND i.[CustomerName] IS NOT NULL) OR (i.[CustomerName] IS NULL AND d.[CustomerName] IS NOT NULL)
        OR d.[Addr1] <> i.[Addr1] OR (d.[Addr1] IS NULL AND i.[Addr1] IS NOT NULL) OR (i.[Addr1] IS NULL AND d.[Addr1] IS NOT NULL)
        OR d.[Addr2] <> i.[Addr2] OR (d.[Addr2] IS NULL AND i.[Addr2] IS NOT NULL) OR (i.[Addr2] IS NULL AND d.[Addr2] IS NOT NULL)
        OR d.[Addr3] <> i.[Addr3] OR (d.[Addr3] IS NULL AND i.[Addr3] IS NOT NULL) OR (i.[Addr3] IS NULL AND d.[Addr3] IS NOT NULL)
        OR d.[Zip] <> i.[Zip] OR (d.[Zip] IS NULL AND i.[Zip] IS NOT NULL) OR (i.[Zip] IS NULL AND d.[Zip] IS NOT NULL)
        OR d.[Contact1] <> i.[Contact1] OR (d.[Contact1] IS NULL AND i.[Contact1] IS NOT NULL) OR (i.[Contact1] IS NULL AND d.[Contact1] IS NOT NULL)
        OR d.[Phone1] <> i.[Phone1] OR (d.[Phone1] IS NULL AND i.[Phone1] IS NOT NULL) OR (i.[Phone1] IS NULL AND d.[Phone1] IS NOT NULL)
        OR d.[email] <> i.[email] OR (d.[email] IS NULL AND i.[email] IS NOT NULL) OR (i.[email] IS NULL AND d.[email] IS NOT NULL)
    )
END

暫無
暫無

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

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