假设我们有一个这样的查询(我的实际查询与此类似,但很长)
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)
此查询是先选择并全部插入,还是将每个选定项逐一插入?这很重要,因为我正在尝试根据之前插入的记录插入一条记录,但它似乎不起作用。
这会运行一次 select 语句,然后基于该语句插入。这种方式效率更高。
由于您已经知道要插入的内容,因此您应该能够在选择查询中处理此问题,而不是查看已插入的内容。
首先运行选择查询。因此它将选择与您的过滤器匹配的所有行。之后执行插入。使用一个操作时没有逐行插入。
不过,如果您想做一些在每次插入后检查的递归操作,您可以使用 CTE(通用表表达式)。http://msdn.microsoft.com/en-us/library/ms190766(v=sql.105).aspx