关于减少多触发逻辑的问题(SQL Server 2008)

时间:2011-01-09 22:46:51

标签: tsql sql-server-2008 triggers

背景:

我有一个网站(ASP.NET MVC),用户可以在其中编写/编辑/删除“评论”。 这样做需要启动数据库触发器以更新系统上的一些全局统计信息。

数据库表:

  • 回顾(父母)
  • MetaData1(评论1 - 0..1 MetaData1)
  • MetaData2(评论1 - 0..1 MetaData2)
  • MetaData3(评论1 - 0 .. * MetaData3)

所以评论是主表(ReviewId - identity),另一个是元数据。

问题:

我有一个执行计算的存储过程,每当创建/编辑/删除评论时都需要调用它。

目前,我有一个触发器,它在所有表(4个相同的触发器)上调用SP。但这导致存储过程可能需要执行一次才能执行4次。

我不能只将它放在Review上,因为如果用户编辑审阅的元数据,则不会触及Review表,因此触发器不会触发。

我需要一种说法“观看所有这些表的活动,创建/编辑/删除记录时,启动此程序一次。”

任何提示/建议/想法?

仅供参考 - 如果重要的话,我正在使用Entity Framework 4进行CRUD操作。

2 个答案:

答案 0 :(得分:1)

在3个MetaDataX表上删除触发器。保存元数据记录后,确实在Review表中更改了某些内容(“最后编辑”时间将是一个很好的候选者)。

您可能希望编写一些代理方法来在Review map中实现上述逻辑来操作元数据对象(并且不要直接使用MetaDataX映射对象)。

答案 1 :(得分:0)

摆脱实体框架和触发器。创建一个更新四个表的存储过程,并从您的网页中调用它。