2011-07-05 81 views
0

说我有6个表。使用触发器来保留关系表的历史记录

  1. 工作站
  2. Workstation_CL
  3. 位置
  4. Location_CL
  5. 特点
  6. Features_CL
我目前使用触发器执行插入到每个表的 “_CL” 版本

还有一个额外的字段,表示该更改是否为“更新” E“,”INSERT“或”DELETE“。

工作站表跟踪“modified_by”用户。如果用户更新“工作站”对象的位置,则会更新“位置”表以及“工作站”表。对Workstation表的唯一修改是“modified_by”字段,以便我知道是谁进行了更改。

我遇到的问题是当我考虑拉取审计报告时。我将如何将“Location_CL”中的记录链接到“Workstation_CL”中的记录都由单独的触发器填充。

不知何故我的问题部分被删除。对于那个很抱歉。

问题:如何在“Workstation_CL”和“Location_CL”中提供某种类型的唯一标识符,以便我可以识别每个修订版?例如,当我从“Location_CL”中提取所有记录并查看所有位置更改时,从“Workstation_CL”拉取用户名以更改位置?

+0

那里没有问题吗? –

+0

问题是:'我如何将“Location_CL”中的记录链接到“Workstation_CL”' – MatBailie

+0

中的记录,谢谢@Dems,这是正确的。 – shmick

回答

0

在触发事件,我是能够执行的是以下几点:

SELECT @trans_id=transaction_id FROM sys.dm_tran_current_transaction 

这让我对当前操作的事务ID。

与此,我能够将其插入到相应的_CL表,然后执行选择匹配自动生成的ID。

0

为每个修订版提供触发器生成的GUID。用值填充两个表中的字段(RevisionId)。

+0

我将GUID从Workstation_CL表中推送到Location_CL表?两个触发器都从独立的存储过程彼此独立地发射。 – shmick

0

在每张审计表上需要2列,也许3列。

1)时间戳,所以你知道什么时候进行了更改。
2)用户已更改,因此您可以跟踪是谁进行了更改 - 我假定位置可以独立于Workstation进行更改。 3)您也可能需要交易的标识符。我想你可以从DB获得一个ID,但我不确定。

虽然我觉得没有时间戳和用户的情况下您可以获得有效的报告,但我不认为您只是将用户放在一张桌子上。

+0

我在考虑在Workstation_CL表中添加自动生成的标识符,但我需要找到一种方法来将该标识符插入到Location_CL表中... – shmick

相关问题