【发布时间】: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