2016-06-22 4 views
-1

В настоящее время у меня есть хранимая процедура, которая выполняет массовую вставку в таблицу с именем «TomorrowPatients» из CSV-файла. При выполнении массовой вставки мне нужно определить, добавлена ​​ли добавленная запись в таблицу, и если так, НЕ добавьте запись. Если запись не существует, мне нужно ПРИЛОЖИТЬ ее в таблице. Каков наиболее эффективный способ этого? Любая помощь будет оценена.SQL проверяет, существует ли запись в таблице перед массовой вставкой

EDIT: Я создал временную таблицу под названием TomorrowPatients_Temp. Я пытаюсь использовать эту таблицу, чтобы определить, какие записи нужно вставить.

+2

Я бы сказал BULK IMPORT в временную таблицу, а затем сделал INSERT WHERE NOT EXISTS или MERGE – squillman

+0

Массовая вставка в таблицу temp/staging, а затем влево, чтобы присоединиться к ней в таблице назначения с 'where destination.PK is null' –

+0

Не могли бы вы привести пример этого. – Devin

ответ

0

Вставьте все данные во временную таблицу, скажем, # TempData.Then использовать следующий код:

INSERT INTO TommorowPatients 
SELECT * FROM #TempTable TT 
LEFT JOIN TommorowPatients TP ON TT.PatientId = TP.PatienId 
    AND TT.PatientName = TP.PatientName 
    AND TT.PatientSSN = TP.PatientSSN 
WHERE TP.PatientId IS NULL 

Где PatientId это вы первичный ключ для таблицы TommorowPatients.

НЕ добавляйте столбец «RoomNumber» с LEFT JOIN как: TT.RoomNo = TP.RoomNo. Таким образом, даже если номер комнаты изменится, новые данные не будут вставлены, поскольку мы присоединились только к конкретным данным пациента.

+0

Спасибо за помощь. Я пытаюсь это прямо сейчас. Сообщите, как это будет. – Devin

+0

Будет ли это работать, даже если данные были изменены в не временной таблице. После начальной загрузки данных пользователь может манипулировать тем, что «Комната» находится в записи, и это будет означать, что она не будет той же самой строкой во временной шкале, что и в нетемпературных таблицах. – Devin

+0

Под «не временными таблицами», означает таблицу, в которую вы вставляете? То есть, «MyTable», который я использовал в своем ответе? –

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