【发布时间】:2010-10-19 05:48:55
【问题描述】:
我要做的是找出更新了哪些字段并将更改记录到不同的表中。
DECLARE
@BillNo int,
@column_name varchar(500)
SELECT @BillNo = BillNo FROM INSERTED
DECLARE HistoryMonitorLoop CURSOR FOR
SELECT
column_name
FROM
information_schema.columns
WHERE
table_name = 'Shipment';
OPEN HistoryMonitorLoop
FETCH next FROM HistoryMonitorLoop INTO @column_name
WHILE @@Fetch_status = 0
BEGIN
DECLARE
@OldValue varchar(500),
@NewValue varchar(500)
SET @OldValue = (SELECT @column_name FROM Deleted);
SET @NewValue = (SELECT @column_name FROM Inserted);
IF(@OldValue != @NewValue)
BEGIN
DECLARE @Comment varchar(5000)
SELECT @Comment = @column_name + ' Changed from ' + @OldValue + ' to ' + @NewValue
EXEC ShipmentNote_Insert @BillNo=@BillNo,@CoordinatorID=1,@Comment=@Comment
END
FETCH next FROM HistoryMonitorLoop INTO @column_name
END
CLOSE HistoryMonitorLoop
DEALLOCATE HistoryMonitorLoop
发生的事情是
SET @OldValue = (SELECT @column_name FROM Deleted);
SET @NewValue = (SELECT @column_name FROM Inserted);
正在将 @OldValue 和 @NewValue = 设置为列名而不是列的值 - sql 将其处理为 SET @OldValue = (SELECT 'column_name' FROM Deleted);
【问题讨论】:
-
那么,脚本有效吗?你有错误吗?您只是在测试之前询问它是否还可以吗?
-
发生了什么是 SET @OldValue = (SELECT @column_name FROM Deleted); SET @NewValue = (SELECT @column_name FROM Inserted);正在将 @OldValue 和 @NewValue = 设置为列名而不是列的值
-
sql 将其处理为 SET @OldValue = (SELECT 'column_name' FROM Deleted);
标签: sql triggers history tracking sql-update