2013-03-01 116 views
1

比方说,我们有这样的查询合并(我的实际查询与此类似,但相当长)插入与选择其中

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

首先选择查询运行。所以它会选择与你的过滤器匹配的所有行。之后,执行插入操作。当您使用一个操作时,不会逐行插入。

如果你想做一些递归的操作,每次插入后你都可以使用CTE(Common Table Expressions)。 http://msdn.microsoft.com/en-us/library/ms190766(v=sql.105).aspx

2

这会运行一次select语句,然后基于此插入。这种方式更有效率。

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