比方说,我们有这样的查询合并(我的实际查询与此类似,但相当长)插入与选择其中
insert into t1(id1,c1,c2)
select id1,c1,c2 from t2
where not exists(select * from t1 where t1.id1=t2.id1-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)
这是否查询选择第一和插入所有,或插入每个选定项目逐个? 它很重要,因为我试图根据以前插入的记录插入一条记录,它似乎不工作。
首先选择查询运行。所以它会选择与你的过滤器匹配的所有行。之后,执行插入操作。当您使用一个操作时,不会逐行插入。
如果你想做一些递归的操作,每次插入后你都可以使用CTE(Common Table Expressions)。 http://msdn.microsoft.com/en-us/library/ms190766(v=sql.105).aspx
这会运行一次select语句,然后基于此插入。这种方式更有效率。
由于您已经知道要插入的内容,因此您应该能够在选择查询中处理此问题,而不必查看已插入的内容。