触发记录插入/更新/删除的值SQL Server 2012

问题描述:

我正在使用SQL Server 2012 Express,由于我真的习惯了PL/SQL,所以有点难以找到我的T-SQL问题的一些答案。触发记录插入/更新/删除的值SQL Server 2012

我有什么:约7台具有鲜明的列和另外一个来自其他7

问题记录插入/更新/删除值:我怎么能为每个表创建一个触发器,它将修改后的数据存储在Log表中,考虑到我无法使用更改数据捕获,因为我正在使用SQL Server Express版本?

附加信息:Logs表中只有两列需要帮忙填写;从所有列的改变数据合并,下面的例子:

CREATE TABLE USER_DATA 
(
    ID INT IDENTITY(1,1) NOT NULL, 
    NAME NVARCHAR2(25) NOT NULL, 
    PROFILE INT NOT NULL, 
    DATE_ADDED DATETIME2 NOT NULL 
) 
GO 

CREATE TABLE AUDIT_LOG 
(
    ID INT IDENTITY(1,1) NOT NULL, 
    USER_ALTZ NVARCHAR(30) NOT NULL, 
    MACHINE SYSNAME NOT NULL, 
    DATE_ALTERERED DATETIME2 NOT NULL, 
    DATA_INSERTED XML, 
    DATA_DELETED XML 
) 
GO 

我需要帮助填充的列是最后两个(DATA_INSERTEDDATA_DELETED)。我甚至不知道,如果数据类型应该是XML,但是当有人要么

INSERTSUPDATES(仅适用于新的值)/更新的所有列中插入的所有数据USER_DATA应该以某种方式在合并DATA_INSERTED

DELETESUPDATES(仅适用于旧的值),删除所有数据/更新的所有列的USER_DATA应该以某种方式对DATA_DELETED合并。

可能吗?

+2

我宁愿为每个表而不是一个通用的审核。它让历史变得更简单。如果您将所有内容都存储为XML,则必须将所有的XML碎片化以查看历史记录。 –

+0

@SeanLange嗨,谢谢!我不知道“审计”。我谷歌搜索关于它,并找到了我想要的解决方案(种类,将不得不修改我的需要的过程)从[这个答案]的第一个链接(http://*.com/a/17546860/2970272 )。请张贴它作为答案,以便我可以接受它。干杯! – mrbTT

+0

您链接的帖子几乎描述了我正在谈论的内容。我不关心这些观点,我不想重写那些只是为了得到一些观点。很高兴你找到了一个可行的解决方案。 –

只是张贴,因为这是什么解决了我的问题。正如用户@SeanLange在我的文章的评论中所说的那样,他对我说要使用"audit",我不知道它存在。

使用Google搜索它,导致我到this * answer其中第一个链接有一个程序创建触发器和“影子”表做我需要的东西(它并没有将所有值合并到一列中,但它适合工作)。

Use the inserted and deleted Tables

DML触发器语句使用两种特殊的表:deleted表和 插入的表格。 SQL Server自动创建并管理这些表。您可以使用这些临时内存驻留表来 测试某些数据修改的影响,并为DML触发器操作设置条件 。您不能直接修改 表中的数据,也不能在 表上执行数据定义语言(DDL)操作,例如CREATE INDEX。在DML触发器中,插入和删除的表主要用于执行以下操作:在表之间扩展 参照完整性。插入或更新基于视图的基表 中的数据。测试错误并根据 错误采取措施。查找数据修改之前表格状态与 之间的差异,并根据该差异采取操作。

而且

OUTPUT Clause (Transact-SQL)

从返回的信息,或基于表达式,每行一个INSERT影响 ,UPDATE,DELETE或MERGE语句。这些结果可以是 返回给处理应用程序以用于诸如 确认消息,存档以及其他此类应用程序 要求。结果也可以插入到表格或表格 变量中。此外,可以在嵌套的INSERT,UPDATE,DELETE或MERGE语句中捕获OUTPUT 子句的结果,并将这些结果插入到目标表或视图中。