多表触发更新/删除/插入

时间:2015-02-24 21:11:15

标签: sql sql-server database tsql triggers

我无法创建SQL Server触发器以执行我想要的操作。我对触发器没有多少经验。

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

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

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

我需要一个连接数据的触发器,并会在cluster_metadataactivities_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 个答案:

答案 0 :(得分:0)

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

谢谢大家!