我创建了一个转换视图,该视图使用来自两个不同表的值更新了主表。
进行此更新时,我需要更改所有表中受影响记录的'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值。