创建INSTEAD OF UPDATE触发器以更新3个表中的HasChanged字段

时间:2018-09-21 09:15:02

标签: sql sql-server triggers sql-update

我创建了一个转换视图,该视图使用来自两个不同表的值更新了主表。

进行此更新时,我需要更改所有表中受影响记录的'HasChanged'值。

Ex:主表中的一行用一个表中的道路名称和另一个表中的城市名称更新。包含新道路名称和城市名称的2个表中的行以及主表必须将其HasChanged值更新为0(从1)。

为此,我需要创建一个触发器。到目前为止,这就是我所拥有的:

CREATE TRIGGER [Transform].[trItems_HasChanged] ON [Transform].[vItems_HasChanged]
INSTEAD OF UPDATE
AS
BEGIN
SET NOCOUNT ON

        CREATE TABLE #inserted
        (
                             Id BIGINT
        )
        CREATE TABLE #PostnummerBy
        (
                             Postnr BIGINT
        )
        CREATE TABLE #Vejstykke
        (
                             Id BIGINT
        )

        INSERT INTO #Inserted (Infohub_Id)
        SELECT Id FROM inserted

        CREATE NONCLUSTERED INDEX ixInserted_Infohub_Id ON #Inserted (Infohub_Id)

                UPDATE 
                             InfohubStaging.Perfion.tMirror_Items 
                SET 
                             Infohub_HasChanged = 0
                FROM
                             InfohubStaging.Perfion.tMirror_Items 
                             JOIN #Inserted i ON i.Infohub_Id = InfohubStaging.Perfion.tMirror_Items.Infohub_Id
                WHERE 
                             Infohub_HasChanged = 1

                UPDATE 
                             InfohubStaging.Nav.tMirror_PimItem 
                SET 
                             Infohub_HasChanged = 0
                FROM
                             InfohubStaging.Nav.tMirror_PimItem 
                             JOIN #Inserted i ON i.Infohub_Id = InfohubStaging.Nav.tMirror_PimItem.InfohubId
                WHERE 
                             Infohub_HasChanged = 1

                UPDATE 
                             InfohubStaging.Ax.tMirror_Items_LiveUpdates  
                SET 
                             Infohub_HasChanged = 0
                FROM
                             InfohubStaging.Ax.tMirror_Items_LiveUpdates 
                             JOIN #Inserted i ON i.Infohub_Id = InfohubStaging.Ax.tMirror_Items_LiveUpdates.Infohub_Id
                WHERE 
                             Infohub_HasChanged = 1

    END

我不确定如何正确执行此操作。我知道执行更新触发器(之前和之后的数据)时会创建2个临时表。由于临时表不可索引,因此我需要为其创建索引。因此,我需要创建3个表,每个表需要更新其HasChanged值。

我的预期输出是在Vejstykke,PostnummerBy和Master表中更新了HasChanged值。

0 个答案:

没有答案