Создание триггера INSTEAD OF UPDATE для обновления поля HasChanged в 3 таблицах - PullRequest
0 голосов
/ 21 сентября 2018

Я создал представление преобразования, которое обновляет основную таблицу значениями из двух разных таблиц.

При выполнении этого обновления мне нужно изменить значение HasChanged во всех таблицах для затронутых записей.

Пример: одна строка в основной таблице обновляется с указанием названия дороги из одной таблицы и названия города из другой.Для строк в 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.

У моего ожидаемого результата этого есть значение HasChanged, обновленное в таблицах Vejstykke, PostnummerBy и Master.

...