Можно ли использовать где в с, если не существует оператор выбора в SQL Server? - PullRequest
0 голосов
/ 27 сентября 2018

Я хотел бы обновить таблицу, сравнивая ее с несколькими значениями.

Тем не менее, команда выполнена успешно без вставки данных, если одно из них в условии удовлетворяет, я хотел бы вставить одно другое значение, если mid нет встол.

Можно ли расширить запрос SQL более чем следующим образом?

IF (NOT EXISTS (SELECT * FROM membership WHERE mid IN (513, 761, ...)))
    INSERT INTO membership (id, uId, rId, gId, assignedBy .... )
    VALUES (1, 226, 5, 1, 5, 3), 
           (1, 227, 7, 6, 1, 3)
        ...

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

1 Ответ

0 голосов
/ 28 сентября 2018

Ваш вопрос не ясен, но позвольте мне сформулировать этот ответ:

Если вы хотите вставить несуществующие записи на основе ключевых столбцов, используйте этот шаблон:

-- First set up a virtual table called SRC that contains our manual values
-- This is called a CTE (Common Table Expression)
WITH SRC AS
(
    SELECT * FROM 
    (
        VALUES 
           (1, 226, 5, 1, 5, 3), 
           (1, 227, 7, 6, 1, 3)

    ) as T (id, uId, rId, gId, assignedBy, mid)
)

-- select only those values that don't exist in the target and insert them
INSERT INTO membership (id, uId, rId, gId, assignedBy,mid)
SELECT id, uId, rId, gId, assignedBy,mid FROM SRC
WHERE NOT EXISTS (
    SELECT * 
    FROM membership TGT WHERE TGT.mid = SRC.mid)

Разумеется, версия MERGE, вероятно, будет проще.Вы также можете переписать это многими другими способами - вы можете исключить уже существующие строки в CTE

...