插入组合中选择where

时间:2013-03-01 07:35:31

标签: sql sql-server tsql sql-insert select-into

假设我们有这样的查询(我的实际查询与此类似,但很长)

insert into t1(id1,c1,c2)
select id1,c1,c2 from t2 
where not exists(select * from t1 where t1.id1=t2.id1-1)

此查询是先选择并插入全部,还是逐个插入每个选定的项目? 这很重要,因为我正在尝试根据以前插入的记录插入记录,但它似乎不起作用。

2 个答案:

答案 0 :(得分:2)

这会运行一次select语句,然后根据它进行插入。这种方式效率更高。

由于您已经知道要插入的内容,因此您应该能够在选择查询中处理此问题,而不是查看已插入的内容。

答案 1 :(得分:2)

首先运行选择查询。因此,它将选择与您的过滤器匹配的所有行。之后执行插入。使用一个操作时,没有逐行插入。

如果你想做一些递归的事情,将在每次插入后检查你可以使用CTE(公用表表达式)。 http://msdn.microsoft.com/en-us/library/ms190766(v=sql.105).aspx