0

我有一个 Products 表,其中包含一个属性,该属性将由最终用户通过 ERP 更新进行更新。发生这种情况时,我需要将更新复制到另一个表中。我完全没有创建 T-SQL 触发器的经验,但我相信它会实现我的目标。

示例:在IC_Products表中:

Productkey = 456
StockLocation = ‘GA-07-A250’

IC_ProductCustomFields表中(将开始相同,因为我将运行一个脚本来做到这一点):

Productkey = 456
CustomFieldKey = 13 
Value = ‘GA-07-A250’

IC_Products.StockLocation列更新时,我希望 newIC_ProductCustomFields.Value中的值也能立即自动更新。
如果在中创建新记录,IC_Products那么我希望在中创建新记录IC_ProductCustomFields

我想知道如何编写触发脚本以及如何实现它。我正在使用 SQL Server 2005。

4

1 回答 1

0

你想要这样的东西:

CREATE TRIGGER [dbo].[tr_Products_SyncCustomFields] ON [dbo].[IC_Products] 
FOR INSERT, UPDATE
AS
    -- First, we'll handle the update. If the record doesn't exist, we'll handle that second
    UPDATE IC_ProductCustomFields
    SET Value = inserted.StockLocation
    FROM IC_ProductCustomFields cf
        INNER JOIN inserted -- Yes, we want inserted. In triggers you just get inserted and deleted
            ON cf.Productkey = inserted.Productkey AND CustomFieldKey = 13;

    -- Now handle the insert where required. Note the NOT EXISTS criteria
    INSERT INTO IC_ProductCustomFields (Productkey, CustomFieldKey, Value)
    SELECT Productkey, CustomFieldKey, Value
    FROM inserted
    WHERE NOT EXISTS 
    (
        SELECT * 
        FROM IC_ProductCustomFields 
        WHERE Productkey = inserted.Productkey AND CustomFieldKey = 13
    );

GO

我认为,您可以为插入和更新执行单独的触发器,但是如果自定义字段不同步,这也会产生恢复(假设?)不变量的副作用;即使在更新中,如果自定义字段不存在,这将根据需要插入新记录,以使其重新符合您的规范。

于 2013-11-12T19:15:45.160 回答