如何在SQL Server中执行多个插入之前的一个位置

如何在SQL Server中执行多个插入之前的一个位置,sql,nhibernate,sql-server-2008,Sql,Nhibernate,Sql Server 2008,我正在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 EXI

我正在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))
为了便于说明,请在表中插入一些人员,如果存在任何具有定义年龄之一的记录,则不应执行任何插入

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))
我该怎么做

试试这个:

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))