Как сделать один, где ДО нескольких вставок в SQL Server - PullRequest
3 голосов
/ 19 декабря 2010

Я делаю множественную вставку в SQL Server, используя UNION ALL между вставками. В последней части запроса у меня есть предложение WHERE. Теперь кажется, что предложение WHERE выполняется перед каждым оператором, но я хочу, чтобы WHERE выполнялся только один раз. Если предложение WHERE имеет результат, то ни одна из вставок не должна выполняться.

Для иллюстрации, вставьте несколько человек в таблицу, если какие-либо записи существуют с одним из определенных возрастов, ни одна из вставок не должна выполняться.

INSERT INTO mytable 
    select 1, 33,john UNION ALL
    select 2, 28,james UNION ALL
    select 3, 20,Harry UNION ALL
WHERE NOT EXISTS (SELECT 1 FROM mytable where age in(22,28,30))

Как мне это сделать?

1 Ответ

5 голосов
/ 19 декабря 2010

Попробуйте вместо этого:

INSERT INTO mytable 
(id, age, name)
SELECT * FROM
(
    SELECT 1 AS id, 33 AS age, 'john' AS name
    UNION ALL
    SELECT 2, 28, 'james'
    UNION ALL
    SELECT 3, 20, 'Harry' 
) T1
WHERE NOT EXISTS (SELECT 1 FROM mytable WHERE age IN (22, 28, 30))
...