我有这个触发器来更新列的值格式,但我想让它在视图而不是表中的多个列上进行更新。
触发器;
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
我尝试在t.colName = dbo.FunctionName(i.colName)
下添加第二个SET
,但这不起作用。查询已运行,但未更新第二列中的值。
如何修改此触发器以使其在视图上运行?
由于
编辑1:
我收到这个错误; View or function 't' is not updatable because the modification affects multiple base tables.
我还将AFTER INSERT
更改为INSTEAD OF INSERT
。
答案 0 :(得分:1)
我认为您的错误消息是正常的。我猜您的观点基于多个表格
连接视图上的任何INSERT,UPDATE或DELETE操作一次只能修改一个基础基表。
检查此链接:
http://docs.oracle.com/cd/B10501_01/server.920/a96521/views.htm#391
答案 1 :(得分: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