У меня есть таблица, в которой необходимо обновить 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!'