【发布时间】:2019-07-27 02:27:43
【问题描述】:
我希望记录对我的表所做的任何更新。所以我决定搜索它并发现创建数据库触发器。我遵循了一个教程,并且成功地记录了对表所做的任何更改,但没有记录任何已完成的更新。遵循本教程:https://jackworthen.com/2018/03/19/creating-a-log-table-to-track-changes-to-database-objects-in-sql-server/
查询:
CREATE TRIGGER [backup_objects]
ON DATABASE
FOR CREATE_PROCEDURE,
ALTER_PROCEDURE,
DROP_PROCEDURE,
CREATE_TABLE,
ALTER_TABLE,
DROP_TABLE,
CREATE_FUNCTION,
ALTER_FUNCTION,
DROP_FUNCTION,
CREATE_VIEW,
ALTER_VIEW,
DROP_VIEW
AS
SET NOCOUNT ON
DECLARE @data XML
SET @data = EVENTDATA()
INSERT INTO [dbo].UserChangelog(databasename, eventtype,
objectname, objecttype, sqlcommand, loginname)
VALUES(
@data.value('(/EVENT_INSTANCE/DatabaseName)[1]', 'varchar(256)'),
@data.value('(/EVENT_INSTANCE/EventType)[1]', 'varchar(50)'),
@data.value('(/EVENT_INSTANCE/ObjectName)[1]', 'varchar(256)'),
@data.value('(/EVENT_INSTANCE/ObjectType)[1]', 'varchar(25)'),
@data.value('(/EVENT_INSTANCE/TSQLCommand)[1]', 'varchar(max)'),
@data.value('(/EVENT_INSTANCE/LoginName)[1]', 'varchar(256)')
)
GO
我认为触发器丢失了,“UPDATE_TABLE”但不幸的是它甚至不存在。
有人知道我可能需要在触发器中添加什么吗?从技术上讲,我不需要它专注于整个数据库,但这只是一个奖励。
【问题讨论】:
-
我认为您的触发器缺少“更新时”语句...
-
@Karlomanio on_update 是无效的事件类型。
-
什么是 EVENTDATA()?
-
您在 UPDATE 中查找哪些信息?通常,对 UPDATES 表的审计会查找对数据所做的更改,但您的列似乎没有传达这一点。
-
@HereGoes 只是在寻找新的更新值。
标签: sql sql-server