我在StackOverflow中遇到过与此主题相关的一些问题,但大多数问题都没有得到解答。 使用SQLServer,ASP.NET MVC。
我有多个表(T1,T2,T3,T4,T5),当表T1,T2,T3,T4中的数据被修改时,我必须更新表T5中的时间戳。 例如:T2是国家表,其中包含有关所有国家/地区的信息 T3是键盘表,其中包含所有部件描述。 T4是电视屏幕表,其中包含所有部件描述 T1,T5是具有上述表的信息的表,LookupName,DataAdded,DataModified。 (FirstRow将是Country,DateAdded,DateModified等) T1还有像enable这样的附加列,即N,然后我们将删除T5表中的相应条目。
如果更改了T1,T2,T3,T4中的任何数据(从UI或直接从sqlserver),我必须更新T5中相应的行时间戳列。
我不需要监视T1表的所有行上的数据更改,因为它有行数据,我不需要跟踪更改。
我想过使用触发器,但我被告知它会阻碍性能并且我的领导不满意他想知道无论如何我们可以在T1,T2,T3,T4中的数据时获得信号或通知类型被修改。
有人可以帮忙吗?
答案 0 :(得分:0)
如果没有仔细编写和测试,触发器可能会导致性能问题。也就是说,触发器是一个强大的工具,不应该完全排除。这种模式效果很好......
CREATE TRIGGER [dbo].[trg_T1]
ON [dbo].[T1] --Repeat this pattern for T2, T3 & T4
FOR UPDATE NOT FOR REPLICATION
AS
BEGIN;
SET NOCOUNT ON;
UPDATE T5
SET DataModified = GETDATE()
FROM dbo.T5
INNER JOIN DELETED
ON T5.ID = DELETED.ID;
END;
我应该强调测试这段代码(性能和行为)的重要性,因为我无法访问您的数据,所以我没有这样做。但希望你明白这一点?