2017-01-27 4 views
0

У меня есть таблица с множеством обновлений и вставок. Моя идея - запускать задание один раз в день, которое вызывает процедуру для внесения некоторых поправок в эту таблицу, которые могут возникать в данных, например rtrim, ltrim, удалять табуляции, разрывы строк и т. Д.Таблица аудита только в определенных случаях

Я хочу, чтобы войдите в таблицу ID, Original Value и Modified Value только из этих заданий, чтобы отслеживать эти изменения.

Есть ли способ сделать это?

Я не возражаю против изменений, внесенных другими способами, и в любом случае я не хочу тратить на него ресурсы.

Спасибо

+0

В самой процедуре введите код для ввода значения до и после значения. И вставьте в таблицу аудита. Так что в этом специальном случае только вы будете делать аудит. –

ответ

1

Есть несколько способов, которыми вы могли бы приблизиться к этому. Этот метод использует условие output для update query для аудита изменений. Мы собираемся использовать специальные таблицы inserted and deleted для хранения старых и новых значений.

Если вы планируете ежедневно запускать свои обновления, вы можете внедрить эту технику в пределах SSIS job. SQL Agent может выполнять задание по фиксированному расписанию, для вас.

Примеры данных

-- Sample data table. 
DECLARE @T TABLE 
    (
     ID  INT, 
     Value VARCHAR(255) 
    ) 
; 

-- Sample audit table. 
DECLARE @T_AUDIT TABLE 
    (
     ID   INT, 
     OldValue VARCHAR(255), 
     NewValue VARCHAR(255) 
    ) 
; 

-- Let's add some records to experiment with... 
INSERT INTO @T 
    (
     ID, 
     Value 
    ) 
VALUES 
    (1, ' abc'), 
    (2, 'def '), 
    (3, '*** ****') -- Using 4 spaces to represent a tab. 
; 

Update Query

-- Update data table, and write changes to audit table. 
UPDATE 
    @T 
SET 
    Value = LTRIM(RTRIM(REPLACE(Value, ' ', ''))) 
OUTPUT 
    inserted.ID, 
    deleted.Value AS OldValue, 
    inserted.Value AS NewValue 
INTO 
    @T_AUDIT 
; 

-- Verify result. 
SELECT 
    * 
FROM 
    @T_AUDIT 
; 

Это возвращает ниже. Я заменил пробелы символами подчеркивания, чтобы было легче читать.

ID OldValue  NewValue 
1 _abc   abc 
2 def_   def 
3 ****____**** x 
+0

Thats именно то, что я искал. Спасибо! – Antonio

 Смежные вопросы

  • Нет связанных вопросов^_^