use*_*045 2 sql sql-server audit-trail sql-server-2008
我是 SQL Server 2008 的新手,需要大家的建议。我想找出一个表的 SQL Server 2008中的inserted和表中的更改值,因为我当前正在进行审计跟踪以保留旧值和新值。deleted如何循环所有列以找出删除和插入表中哪个字段的值发生变化?我尝试过 if else 语句进行比较
例如:
create trigger trg_XXX on dbo.table
after update
as
begin
declare
@oldID varchar(6),
@newID varchar(6)
select @oldID = ID from deleted
select @newID = ID from inserted
if(@oldID != @newID)
insert into table (a, b) values (@oldID, @newID)
else
print('do nothing')
Run Code Online (Sandbox Code Playgroud)
有没有办法使用游标循环删除和插入的表或任何替代方法?能给我一些例子吗?
我不太确定你的目标是什么,我想可能是这样的。假设我们有一个这样的表:
CREATE TABLE Product
(
ID INT PRIMARY KEY,
Name NVARCHAR(100) NOT NULL,
Price DECIMAL(10,2) NOT NULL
);
Run Code Online (Sandbox Code Playgroud)
和一些像这样的审计表:
CREATE TABLE ProductAudit
(
AuditID INT IDENTITY PRIMARY KEY,
ProductID INT NOT NULL
OldName NVARCHAR(100) NULL,
OldPrice DECIMAL(10,2) NULL,
NewName NVARCHAR(100) NULL,
NewPrice DECIMAL(10,2) NULL
);
Run Code Online (Sandbox Code Playgroud)
然后创建一个触发器:
CREATE TRIGGER TR_AUDIT
ON Product
FOR INSERT, UPDATE, DELETE
AS
BEGIN
INSERT INTO ProductAudit (ProductID, OldName, OldPrice, NewName, NewPrice)
SELECT
COALESCE(I.ID, D.ID),
D.Name,
D.Price,
I.Name,
I.Price
FROM
INSERTED I FULL OUTER JOIN DELETED D ON I.ID = D.ID;
END
GO
Run Code Online (Sandbox Code Playgroud)
你有它。
| 归档时间: |
|
| 查看次数: |
20134 次 |
| 最近记录: |