sql - 使用 where 将 EventData 插入 SQL 表
问题描述
我有一个简单的日志记录脚本,它从触发器填充更改日志表,我试图通过排除特定模式(chi)的插入来限制插入的行
扳机:
DECLARE @data XML
SET @data = EVENTDATA()
INSERT INTO [dbo].[Object_ChangeLog](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)'))
而且我需要使用 where 子句来过滤模式名称 (chi) 下的对象更改 - 到目前为止我已经尝试过:
WHERE
@data.value('(/EVENT_INSTANCE/ObjectName)[1]', 'varchar(256)') NOT LIKE 'chi%'
不幸的是,这会产生语法错误,有两个问题,首先我需要从事件数据中引入一个单独的列来识别架构吗?其次,我如何利用 where 子句从触发器中的插入中删除这些。
解决方案
由于这似乎是程序代码,您可以简单地使用IF
.
...
IF @data.value('(/EVENT_INSTANCE/ObjectName)[1]', 'varchar(256)') NOT LIKE 'chi%'
BEGIN
INSERT INTO [dbo].[Object_ChangeLog](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)')
);
END;
...
推荐阅读
- python - 从托管的 django 站点连接 ZKTECO 设备出现错误
- c# - JToken 获取具有特定前缀的属性的值
- python - 将包含字典的列表扁平化为单个字典
- pine-script - 如何在 Heaiknashi 图表上获得烛台高低值
- django - 在 Django SphinxSearch 中创建新的 RT 表
- clojure - 如何在 Babashka 中使用 gcloud
- python - AADSTS75011 用户通过服务进行身份验证的身份验证方法与请求的身份验证方法 AuthnContextClassRef 不匹配
- r - 运行预测命令后出现“找不到对象‘V1’”错误
- javascript - 为什么我的导入语句没有提取我需要的功能?
- javascript - 我既不能使用 .click() 也不能使用 .submit() 提交表单