【问题标题】:SQL Trigger to update multiple columns in a ViewSQL 触发器更新视图中的多个列
【发布时间】:2015-11-18 10:49:15
【问题描述】:

我有一个更新列的值格式的触发器,但我想让它在视图而不是表中的多个列上更新。

触发器;

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

【问题讨论】:

  • 更新 t.ColName 两次?

标签: sql sql-server triggers views


【解决方案1】:

我认为你的错误信息是正常的。我猜你的观点是基于多个表

对连接视图的任何 INSERT、UPDATE 或 DELETE 操作一次只能修改一个基础基表。

查看此链接:

http://docs.oracle.com/cd/B10501_01/server.920/a96521/views.htm#391

【讨论】:

    【解决方案2】:

    正如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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-01
      • 2015-02-10
      • 1970-01-01
      • 2013-05-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多