【发布时间】:2016-11-04 17:19:51
【问题描述】:
我正在使用 SQL Server 2012 Express,因为我真的习惯了 PL/SQL,所以很难找到一些 T-SQL 问题的答案。
我所拥有的:大约 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_INSERTED 和 DATA_DELETED)。我什至不确定数据类型是否应该是 XML,但是当有人
INSERTS 或UPDATES(仅限新值),在USER_DATA 的所有列 上插入/更新的所有数据都应该在DATA_INSERTED 上以某种方式合并。
DELETES 或 UPDATES(仅限旧值),USER_DATA 的 所有列 上删除/更新的所有数据都应该以某种方式合并到 DATA_DELETED 上。
有可能吗?
【问题讨论】:
-
我希望对每个表进行审计,而不是对一个通用表进行审计。它使查看历史变得更加简单。如果您将所有内容都存储为 XML,则必须分解所有 XML 以查看历史记录。
-
@SeanLange 嘿,谢谢!我不知道“审计”。我在谷歌上搜索了它,并在this answer 的第一个链接上找到了我想要的解决方案(有点,必须根据我的需要修改一个程序)。请将其发布为答案,以便我接受。干杯!
-
你链接的帖子几乎描述了我在说什么。我不关心分数,我不想为了获得分数而重写它。很高兴您找到了可行的解决方案。
-
很高兴您写了评论,让您了解什么是“审计”!
标签: sql-server sql-server-2012-express