假设我们有这样的查询(我的实际查询与此类似,但很长)
insert into t1(id1,c1,c2)
select id1,c1,c2 from t2
where not exists(select * from t1 where t1.id1=t2.id1-1)
此查询是先选择并插入全部,还是逐个插入每个选定的项目? 这很重要,因为我正在尝试根据以前插入的记录插入记录,但它似乎不起作用。
答案 0 :(得分:2)
这会运行一次select语句,然后根据它进行插入。这种方式效率更高。
由于您已经知道要插入的内容,因此您应该能够在选择查询中处理此问题,而不是查看已插入的内容。
答案 1 :(得分:2)
首先运行选择查询。因此,它将选择与您的过滤器匹配的所有行。之后执行插入。使用一个操作时,没有逐行插入。
如果你想做一些递归的事情,将在每次插入后检查你可以使用CTE(公用表表达式)。 http://msdn.microsoft.com/en-us/library/ms190766(v=sql.105).aspx