假设我有6个表
- 工作站
- Workstation_CL
- Location_CL <
- 功能/gh>
- Features_CL
我目前使用触发器在每个表的"_CL"版本中插入一个额外的字段,该字段表示更改是"UPDATE","INSERT"还是"DELETE"。
工作站表跟踪"modified_by"用户。如果用户更新了"工作站"对象的位置,则"位置"表和"工作站"表同时更新。对工作站表的唯一修改是"modified_by"字段,以便我知道是谁进行了更改。
我遇到的问题是当我想到拉审计报告。我如何将"Location_CL"中的记录链接到"Workstation_CL"中的记录,两者都由单独的触发器填充。
不知怎么的,我的问题部分被删除了。很抱歉。
问题:我如何在"Workstation_CL"one_answers"Location_CL"中提取某种类型的唯一标识符,以便我可以识别每个修订?例如,当我从"Location_CL"拉所有记录,我看到所有的位置变化,从"Workstation_CL"拉用户名,使位置发生变化?
为每个修订指定一个由触发器生成的GUID。在两个表中填充一个字段(RevisionId),值为。
每个审计表需要2到3列。
1)时间戳,以便您知道何时进行了更改。
2)用户更改,所以你可以跟踪谁做了更改-我假设位置可以独立于工作站更改。3)您可能还需要事务的标识符。我想你可以从数据库里查到他的身份,不过我不确定。
如果没有时间戳和用户,我不认为你可以有一个有效的报告,但是,我不认为你只把用户放在一个表上。
在触发事件期间,我能够执行以下操作:
SELECT @trans_id=transaction_id FROM sys.dm_tran_current_transaction
给出当前操作的事务id。
这样,我就可以将它插入到相应的_CL表中,然后执行与自动生成id匹配的选择。