我有2个表个人(IndividualId是主键)和IndividualAudit。每次更新都在单个表上进行 记录转到审计表。有许多列可以修改但我只对拾取SSN被修改的记录感兴趣。 我使用以下查询:
Select DI.IndividualId,DI.ssn FRom Individual I
INNER JOIN IndividualAudit A
ON(I.IndividualId = A.IndividualId and A.UpdateDate = GETDATE())
where i.updatedate = GETDATE() and I.ssn <> a.ssn
group by I.IndividualId,I.ssn
有人可以告诉我我的方法是否正确。
其实我在google上搜索并且害怕看下面的链接: Query help when using audit table
在这篇帖子上回答类似查询的人似乎对sql非常好,并且与他的回答相比,我的方法看起来很幼稚。 所以我只想知道我的理解在哪里。
非常感谢
答案 0 :(得分:0)
我建议不要修复查询,而是使用更新触发器,专门针对您关注的SSN列的更改。由于日期比较(如user2159471所指出的),您提供的查询将无法工作。但即使你修复了查询,你仍然需要运行它才能看到哪些SSN已经更新。
而是使用SQL更新触发器,每次更改个人的SSN时,可能会将条目插入第三个表。然后,您可以随时查看该表,或者针对它运行报告,以查看谁已被更改。
触发器代码如下所示:
CREATE TRIGGER MyCoolNewTrigger ON Individual
FOR UPDATE
AS
SET NOCOUNT ON
IF (UPDATE(SSN))
BEGIN
Declare @oldSSN as varchar(40)
Declare @NewSSN as varchar(40)
set @oldSSN = deleted.SSN --holds the old SSN being changes
Set @NewSSN = inserted.SSN -- holds the new SSN inserted
Insert into IndividualUpdateLog (NewSSN, OldSSN, ChangeDate)
values (@NewSSN, @oldSSN, getdate)
END