ВСТАВИТЬ ИЗ ВЫБРАТЬ И ИСКЛЮЧИТЬ - PullRequest
0 голосов
/ 25 февраля 2019

Я пытаюсь написать хранимую процедуру, которая будет автоматически создавать записи в таблице на основе запроса.Таблица назначения имеет поле GUID, поэтому, если процедура запускается более одного раза, будут вставлены повторяющиеся записи.

Процедура выглядит следующим образом:

INSERT INTO TABLE1 (a, b, c, d, GUID)
SELECT a, b, c, d, NEWID() FROM TABLE2

Как можно избежать дубликатовпроверка, если другие поля (кроме поля GUID) уже существуют?

Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 25 февраля 2019

Вы можете использовать приведенный ниже запрос, чтобы получить желаемый результат.

Внутренний запрос возвращает все записи из таблицы2, которых нет в таблице1, тогда уникальные записи будут вставлены в таблицу1

 INSERT INTO TABLE1 (a, b, c, d, GUID)
select a,b,c,d, newid() from
(
    SELECT a, b, c, d FROM TABLE2 
    except 
    SELECT a, b, c, d  FROM TABLE1

) a
0 голосов
/ 25 февраля 2019

Вы можете использовать LEFT JOIN, чтобы найти записи в Таблице 2, у которых нет совпадений в Таблице1, а затем вставить их.

INSERT INTO TABLE1 (a, b, c, d, GUID)
SELECT t2.a, t2.b, t2.c, t2.d, NEWID() 
FROM TABLE2 t2
LEFT JOIN TABLE1 t1
    ON t1.a=t2.a AND t1.b=t2.b AND t1.c=t2.c AND t1.d = t2.d
WHERE t1.a IS NULL
0 голосов
/ 25 февраля 2019

Вы можете использовать предложение EXISTS:

INSERT INTO TABLE1 (a, b, c, d, GUID)
SELECT a, b, c, d, NEWID() FROM TABLE2 t2
WHERE NOT EXISTS (SELECT 1 FROM TABLE1 t1
                  WHERE t1.a = t2.a AND t1.b = t2.b AND t1.c = t2.c AND t1.d = t2.d);
...