查询帮助以跟踪对表所做的每日更新(针对特定列)

时间:2013-07-19 13:52:25

标签: sql-server tsql

我有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非常好,并且与他的回答相比,我的方法看起来很幼稚。  所以我只想知道我的理解在哪里。

非常感谢

1 个答案:

答案 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