sql-server - 如何在 SQL Server 中使用存储过程创建动态触发器
问题描述
我正在使用 SQL Server 触发器进行审计跟踪,以识别表上的插入、更新和删除。下面是我的表格和触发器:
CREATE TABLE [dbo].[AuditTrail]
(
[AuditId] [INT] IDENTITY(1,1) NOT NULL,
[DateTime] [DATETIME] NOT NULL,
[TableName] [NVARCHAR](255) NOT NULL,
[AuditEntry] [XML] NULL,
CONSTRAINT [PK_AuditTrail] PRIMARY KEY CLUSTERED
)
CREATE TABLE [dbo].[Employee]
(
[ID] [UNIQUEIDENTIFIER] NOT NULL DEFAULT (newid()),
[NameEmployee] [NVARCHAR](255) NOT NULL,
CONSTRAINT [PK_Employee] PRIMARY KEY CLUSTERED
)
CREATE TABLE [dbo].[Transaction]
(
[ID] [UNIQUEIDENTIFIER] NOT NULL DEFAULT (newid()),
[NameTransaction] [NVARCHAR](255) NOT NULL,
CONSTRAINT [PK_Transaction] PRIMARY KEY CLUSTERED
)
CREATE TRIGGER AuditEmployee
ON [dbo].[Employee]
AFTER INSERT, DELETE, UPDATE
AS
BEGIN
SET NOCOUNT ON;
IF (SELECT COUNT(*) FROM deleted) > 0
BEGIN
DECLARE @AuditMessage XML
SET @AuditMessage = (SELECT * FROM deleted FOR XML AUTO)
INSERT INTO AuditTrail (DateTime, TableName, AuditEntry)
VALUES (GETDATE(), 'Simple', @AuditMessage)
END
END
GO
我为员工表创建了一个触发器,但那是一个静态触发器。存储过程如何动态触发取决于我们拥有的表的数量,除了AuditTrail
表?
解决方案
推荐阅读
- css - 在更改类名时删除/更改 css 属性,在页面加载时
- woocommerce - 致命错误:未捕获的 WC_Data_Exception:帐单电子邮件地址无效
- node.js - 如果在开发模式下运行,节点 Vue.js 不同的代码场景
- apache-kafka - 最佳实践 - 发布 Kafka Stream 应用程序
- php - 未找到 PHPUnit 类,即使它已定义
- javascript - 为多个下拉选择呈现标签
- typescript - 创建对象时如何为键编写类型?
- react-native - expo-image-picker 不处理网络浏览器中的取消事件?
- python - 无法正确处理 dict
- node.js - 如何修复“无法编译 Node.js 应用程序”?