【问题标题】:Multiple Table Trigger Update/Delete/Insert多表触发器更新/删除/插入
【发布时间】:2015-04-26 16:45:47
【问题描述】:

我在创建 SQL Server 触发器来执行我想要的操作时遇到问题。我对触发器没有太多经验。

基本上我有一个表,我们称之为cluster_metadata,其中包含描述对象某些属性的元数据。然后我有第二个表,我们称之为activities_table,用户输入的数据可能与cluster_metadata 表中的某些对象有关。

cluster_metadata 表是用户可更新的,但是使用存储过程创建和删除新行,用户只能更新特定值。

activities_table 完全由用户驱动,用户可以插入/修改和删除行。

我需要一个触发器来连接数据并在对cluster_metadata 或activities_table 进行任何修改时更新表。

为简单起见,我减少了列数,但表格看起来像这样。

cluster_metadata:

+----------------------------------+
|  Cluster  |  Eligible  |  Group  |
+----------------------------------+
|  Cluster1 |    True    |    1    |
|  Cluster2 |    True    |    1    |
|  Cluster3 |    True    |    2    |
|  Cluster4 |    False   |    2    |
|  Cluster5 |    True    |    3    |
|  Cluster6 |    True    |    4    |
+----------------------------------+

activities_table:

+--------------------------------------------+
|  Activity  |  ID  |  Group  |  Start Date  |
+--------------------------------------------+
|  Patches   | 1000 |    1    |  02-01-2015  |
|  Patches   | 1000 |    2    |  02-10-2015  |
|  Patches   | 1000 |    3    |  02-20-2015  |
|SomeActivity| 1001 |    2    |  02-30-2015  |
+--------------------------------------------+

使用上述两个表中的数据,我需要创建并保持更新的表如下所示:

+---------------------------------------------------------------------+
|  Cluster  |  Eligible  |  Group  |  Activity  |  ID  |  Start Date  |
+---------------------------------------------------------------------+
|  Cluster1 |    True    |    1    |  Patches   | 1000 |  02-01-2015  |
|  Cluster2 |    True    |    1    |  Patches   | 1000 |  02-01-2015  |
|  Cluster3 |    True    |    2    |  Patches   | 1000 |  02-10-2015  |
|  Cluster3 |    True    |    2    |SomeActivity| 1001 |  02-30-2015  |
|  Cluster4 |    True    |    2    |  Patches   | 1000 |  02-10-2015  |
|  Cluster4 |    True    |    2    |SomeActivity| 1001 |  02-30-2015  |
|  Cluster5 |    True    |    3    |  Patches   | 1000 |  02-20-2015  |
+---------------------------------------------------------------------+

我将如何创建一个可以执行此操作的触发器?我只想创建一个视图,但使用此合并数据需要接受一些用户附加输入。

谢谢!

【问题讨论】:

  • 为什么需要触发器来更新第三张表?为什么不直接创建一个表示连接在一起的两个表的视图?
  • 将问题视为学术问题,您需要在表 1 和表 2 上使用触发器,每个触发器将插入和删除的表与第三个表进行比较,并在该表上执行所需的插入/更新/删除操作。
  • 将“附加输入”保留在第三个表中并将这三个表连接到一个视图中?
  • @diana 我不能只使用视图,因为我需要用户向连接表添加额外的输入。
  • @TabAlleman 谢谢。现在我需要帮助来创建它:)

标签: sql sql-server database tsql triggers


【解决方案1】:

感谢您的所有帮助。基本上我最终做的是使用来自cluster_metadata 和activities_table 的数据创建一个连接视图。从那里我编写了一个存储过程,它获取适当的数据并插入到第三个表中。该过程还确保所有数据都已更新并与每次执行时的视图相匹配。每次用户从 Web UI 向任一表输入任何内容时,我都会从那里运行该过程。不是最好的解决方案,但它正在工作。

谢谢大家!

【讨论】:

    猜你喜欢
    • 2011-05-05
    • 2011-02-27
    • 2012-09-19
    • 2011-11-25
    • 2020-02-02
    • 2011-01-15
    • 2010-12-17
    • 2013-06-10
    • 2012-03-27
    相关资源
    最近更新 更多