То, что я пытаюсь сделать, это выяснить, какие поля были обновлены и записать изменения в другую таблицу.История, основанная на триггерах
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 @[email protected],@CoordinatorID=1,@[email protected]
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
= к ColumnName вместо значения столбца - SQL обрабатывает его как SET @OldValue = (SELECT 'column_name' FROM Deleted);
Итак, работает ли скрипт? Вы получаете ошибки? Вы просто спрашиваете, кажется ли это нормально, прежде чем вы его протестируете? – BradC
и ?, в чем вопрос? –
Что происходит SET @OldValue = (SELECT @column_name FROM Deleted); SET @NewValue = (SELECT @column_name FROM Inserted); устанавливают @OldValue и @NewValue = для имени столбца вместо значения столбца –