2016-07-14 4 views
1

У меня есть таблица STG, где мы ежедневно обрезаем и загружаем значения в таблицу STG из двух таблиц SRC. Я создал флаг изменения (Ch_Flg) и в таблице STG, чтобы вместо ежедневной усечения таблиц мы вставляем значения в STG только тогда, когда некоторые поля в SRC изменились.Вставка записей в таблицу, если значения из src были изменены

Однако, поскольку таблица SRC загружается непосредственно в STG, мне нужна временная таблица между тем, где я могу хранить все записи SRC и проверять с помощью STG, если записи были изменены и вставляются в STG только тогда, когда эти записи были изменены.

Например таблица SRC1 имеют столбцы типа (ID, имя, Tag, Сектор, Отдел, Город, телефон, HireDate и т.д.) и SRC2 имеют столбцы типа (ID, имя, компетенции, город, телефон и т.д.)

Должен ли я загружать все значения из SRC в временную таблицу, а затем сравнивать их с таблицей STG? Или есть более эффективный способ сделать это?

ответ

0

Вы можете загрузить их в временную таблицу, а затем сделать что-то вроде этого

WITH SINGLES AS 
(
SELECT t1.ID 
FROM <sourcetablename> t1 
LEFT JOIN <desttablename> t2 
ON (t1.id = t2.id) 
WHERE t2.id IS NULL 
) 

INSERT <tabletherecordswillbeinserted>(ID, <otherfield>, <otherfield2>) 

SELECT S.id, S.<otherfield1>, s.<otherfield2> 
From singles S 
Left Join <sourcetablename> on S.id = <desttable>.id 
Where <desttable>.id Is Null 

Вы, возможно, потребуется добавить флаг изменения в коде, но это общая идея, вы могли бы поставить флаг изменения в заявление CTE

+0

Спасибо за структуру. что такое синглы? –

+0

Это называется «Common Table Expression» или CTE, это способ собрать определенный набор данных и сделать с ним что-то еще. Таким образом, в этом случае, если вы возьмете инструкцию select внутри «С» и запустите ее со своими таблицами, вы вернете все из одной таблицы, а не в другую. Затем мы берем этот набор данных и вставляем записи, которые не встречаются в таблице адресатов. В вашем случае я предполагаю, что вас интересуют только записи с населенным флагом изменения. Таким образом, вы можете сделать все, чтобы изменить данные, а затем вставить их ниже. – DrHouseofSQL

+0

Редактирование: Все «другие поля», которые у меня есть в нижней части скрипта, должны быть в исходном select в инструкции WITH. Извините, что – DrHouseofSQL

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

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