2015-11-18 37 views
0

我有這個觸發器來更新列的值格式,但是我想使它在視圖中的多個列上更新,而不是在表中更新。SQL觸發器更新視圖中的多個列

觸發器;

CREATE TRIGGER [dbo].[TriigerName] 
ON [dbo].[Table] 
AFTER INSERT 
AS 
BEGIN 
UPDATE 
    t 
SET 
t.ColName = dbo.FunctionName(i.ColName) 
FROM 
    dbo.table t 
INNER JOIN 
    inserted i 
    ON 
    i.PrimaryId = t.PrimaryId 
END 

我曾嘗試加入SET下的第二t.colName = dbo.FunctionName(i.colName),但沒有奏效。查詢已運行,​​但未更新第二列中的值。

如何修改此觸發器以使其在視圖上運行?

感謝

編輯1: 我得到這個錯誤; View or function 't' is not updatable because the modification affects multiple base tables. ,我也將AFTER INSERT更改爲INSTEAD OF INSERT

+1

更新t.ColName兩次? – jarlh

回答

1

正如user3238101說,你不能用一個語句更新2個不同的表,那麼你需要做2個語句。

CREATE TRIGGER [dbo].[TriigerName] 
ON [dbo].[Table] 
AFTER INSERT 
AS 
BEGIN 
    UPDATE 
     t 
    SET 
     t.ColName = dbo.FunctionName(i.ColName) 
    FROM 
     dbo.table t 
    INNER JOIN 
     inserted i 
     ON 
     i.PrimaryId = t.PrimaryId 

    UPDATE 
     t 
    SET 
     t.ColName2 = dbo.FunctionName2(i.ColName2) 
    FROM 
     dbo.table t 
    INNER JOIN 
     inserted i 
     ON 
     i.PrimaryId = t.PrimaryId 
END