如何在SQL Server中多次插入之前执行操作

时间:2010-12-19 00:20:13

标签: sql nhibernate sql-server-2008

我在插件之间使用UNION ALL在SQL Server中进行多次插入。在查询的最后部分,我有一个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 个答案:

答案 0 :(得分:5)

请改为尝试:

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))
相关问题