Sql 查询单个审核表以进行报告

Sql 查询单个审核表以进行报告,sql,audit,Sql,Audit,我一直在考虑为数据库中的几个表创建一个审计表的想法。我在这页上找到了代码: 我喜欢这个想法,但唯一让我有点困惑的是,您将如何查询信息,以便以有用的方式显示信息 进行一些更改后,审核表如下所示: 大多数时候,为了做历史记录,我只需要复制一个表并添加一个日期 修改列的末尾,然后只需将整行复制到历史记录表中,但如果要审核的内容很多,则会创建大量复制的数据和历史记录表 我必须说,我认为这种审计模式是一场噩梦。我想你已经发现了原因。当它使用这个方案时,很难重现数据,一个重要的原因是你没有被改变的数据类型

我一直在考虑为数据库中的几个表创建一个审计表的想法。我在这页上找到了代码:

我喜欢这个想法,但唯一让我有点困惑的是,您将如何查询信息,以便以有用的方式显示信息

进行一些更改后,审核表如下所示:

大多数时候,为了做历史记录,我只需要复制一个表并添加一个日期
修改列的末尾,然后只需将整行复制到历史记录表中,但如果要审核的内容很多,则会创建大量复制的数据和历史记录表

我必须说,我认为这种审计模式是一场噩梦。我想你已经发现了原因。当它使用这个方案时,很难重现数据,一个重要的原因是你没有被改变的数据类型。即使您这样做了,在字符串和本机数据类型之间的转换中也可能会丢失精度

不,我认为你原来的想法要好得多——只是简单地把桌子上的几行划开。大多数情况下,您不必担心占用的额外空间。空间是便宜的相比,在可用性的折衷,你正在削减的变化,按列


还要记住,本文描述的方案甚至不会为非常窄的表节省空间!实际上,它可能比行级审核表更大。

这个“噩梦”(loved Dave的评论)的另一个解决方案是使用两个由审核触发器填充的审核表。您可以评估通过GUI创建触发器和审计表的方法,然后检查其实际工作方式


Dislaimer:我在ApexSQL担任产品支持工程师,我想这取决于您将如何使用审计数据。例如,假设您有一名员工,他有50个相关的表。如果用户希望看到自给定日期以来员工的所有变化,查询50个切换表将是一场噩梦。但是,如果只有一张表,这将是微不足道的。但是,如果您需要自动恢复经审核的数据,而不仅仅是报告数据,我完全同意您的意见。