【问题标题】:SQL - After Update Trigger multiple columns.SQL - 更新后触发多个列。
【发布时间】:2014-01-16 15:07:16
【问题描述】:

我知道有很多关于类似问题的帖子,但没有什么能真正让我前进。

我想通过触发器使用数据库 1 中相应表中的更新内容来更新数据库 2 中的表。它们具有相同的表结构。使用 MS SQL 2008。

在 AFTER INSERT 触发器中执行此操作确实没有问题,就像

INSERT INTO DB2..Table1
SELECT *
FROM inserted
WHERE column1 = @column1

但是在更新后样式时这样做

UPDATE DB2..Table1
SET column2 = @column2 --etcetera in some way
FROM DB1..Table1 
WHERE column1 = @column1 --or something not important

有 100 多个列以及对表列的更改/添加(尽管 DB1..Table1 和 DB2..Table1 将始终具有相同的结构和列),因此为要更新的每一列设置一个值感觉是一个非常糟糕的选择。

我真正想写的是:

UPDATE DB2..Table1
SET DB2..Table1 = (SELECT * FROM inserted WHERE column1 = @column1) alternatively DB2..Table1 = DB1..Table1
WHERE column1 = @column1

此外,我必须为 100 多列中的 3 列设置固定值。这三列将是 DB1 表和 DB2 表之间的唯一区别。插入新行时这也很好,但让我想知道在更新的情况下我应该如何做到这一点。

有什么想法吗?

与此类似的问题:Update multiple columns in SQL 但我真的希望有一种我没有想到的更好的方法。

【问题讨论】:

    标签: sql sql-server-2008 triggers multiple-columns


    【解决方案1】:

    恐怕你运气不好。进行更新的唯一方法是

    set a.col1 = b.val1, a.col2 = b.val2....
    

    可能有一两个具有不同语法选项的 DBMS,但这是标准。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-05
      • 2016-11-03
      • 2015-01-20
      • 2014-10-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多