基本上我在同一个 SQL 数据库中有两个表。[table_1] 和 [table_2]
[标签] 是两个表的主键
[ table_1 ] 的设计是
[Label] [varchar](50) NOT NULL
[Use_Date] [date] NULL
[Sent_Date] [date] NULL
[Checked_Date] [date] NULL
[ table_2 ] 的设计是
[Label] [varchar](50) NOT NULL
[DateFirstRegistered] [date] NULL
[LastUsedDate] [date] NULL
[UsageCount] [int] NULL
如果[ table_1 ] 中的 [ use_date ]有更新,则触发器需要更新 [table_2] 中的两列 [ LastUsedDate ]和 [ UsageCount ] 。[ table_1 ]的其他列中的任何更改都应在不影响 [ table_2 ] 的情况下进行处理。
我有一个触发器,当use_date在 [ table_1 ] 中更新时起作用......但如果不是,它会在其他列更新时导致提交问题。
这是提到的触发器
USE [DB]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TRIGGER [dbo].[trgOnTable1Update] ON [dbo].[Table_1]
AFTER UPDATE
AS
BEGIN
UPDATE c
SET c.LastUsedDate=a.Use_Date,
c.UsageCount=c.UsageCount+1
FROM inserted a
INNER JOIN deleted b ON a.Label=b.Label
INNER JOIN [dbo].[Table_2] c ON a.Label=c.Label
WHERE a.Use_Date<>b.Use_Date
END
我知道我在那里遗漏了一些逻辑缺陷,但对于我的生活我看不到它......任何关于如何让这个工作的帮助将不胜感激。
提前致谢。