SQL — обновление записей и ведение журнала аудита изменений

У меня есть таблица, в которой необходимо обновить 2 столбца на основе наличия записей в нескольких других таблицах. Также для этой цели необходимо использовать временную таблицу. И, наконец, я обязан вести учет изменений. Я на правильном пути здесь?

Я пробовал следующий подход:

SELECT t1.ref_no, t1.closr_date, t1.ext_key INTO #temp100

FROM [dbo].[Table1] t1
WHERE 
 ( t1.[CLOSR_DATE] IS NULL )

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

SELECT ref_no INTO #temp200

FROM  [dbo].[Table2] t2

INNER JOIN [dbo].[Table3] t3
ON t3.[RFVAL_NO] = t2.[SCT_NO] )        
WHERE (( t2.[START_DTTM] > GETDATE() OR t2.[START_DTTM] IS NULL ) )
        UNION ALL
SELECT ref_no FROM  [dbo].[Table3] t4
WHERE ( [A_DTTM] > GETDATE() OR [A_DTTM] IS NULL )
        UNION ALL
SELECT ref_no FROM  [dbo].[Table5] t5
WHERE ( [AS_DTTM] > GETDATE() OR [AS_DTTM] IS NULL )

.....и так далее

/**Удаление всех записей из #temp100 (соответствующих записям в #temp200)**/

DELETE FROM #temp100 WHERE EXISTS (SELECT NULL FROM #temp200 WHERE #temp200.ref_refno = #temp100.ref_refno);
PRINT 'Records from table t1 (that match records in table #temp100 have been deleted!)'

/**Обновление записей в [dbo].[Table1], оставшихся в таблице #t100 **/

UPDATE [dbo].[Table1] t1 
SET [dbo].[t1].[CLOSR_DATE] = CAST('01-JAN-2011' AS DATE), [dbo].[t1].[EXT_KEY] = 'some string' 
WHERE [dbo].[t1].[CLOSR_DATE] IN ( SELECT ref_no FROM #temp100 INNER JOIN [dbo].[Table1] t1 ON #temp100.ref_no = t1.[REF_NO] )
PRINT 'Records in table Table1 have been updated!'

person c c    schedule 02.09.2012    source источник
comment
Добро пожаловать в StackOverflow. В чем именно заключается ваш вопрос? Если это так, как указано (Я на правильном пути здесь?), правильный ответ может быть Да, вы на правильном пути, или Нет, вы не на правильном пути, при этом никакой другой информации не предоставляется. Пожалуйста, отредактируйте и перефразируйте, уточните, о чем именно вы спрашиваете и какую проблему вы хотите, чтобы мы помогли решить. Спасибо.   -  person Ken White    schedule 03.09.2012
comment
Каков ваш конкретный вопрос?   -  person pilcrow    schedule 03.09.2012
comment
Спасибо, ребята. Отредактировали исходный вопрос.   -  person c c    schedule 03.09.2012
comment
почему вы должны использовать временные таблицы? это домашнее задание?   -  person Gonzalo.-    schedule 03.09.2012
comment
Нет, это не домашнее задание. Впрочем, другой коллега пробовал и без него - большой большой скрипт с множеством объединенных таблиц и выводит около 500 000 записей, которые надо потом обновлять. Выполнение этого скрипта заняло очень много времени и было подвержено возникновению ошибок, которые требовали довольно много времени для попытки их устранения. Поэтому такой подход.   -  person c c    schedule 03.09.2012
comment
Ну, у кого-нибудь есть предложения для меня?   -  person c c    schedule 10.09.2012


Ответы (1)


Вы должны использовать триггеры для этой задачи, это сэкономит вам много кода. Попробуйте это Добавление простого аудита на основе триггеров в базу данных SQL Server

person Ansari    schedule 12.09.2012