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)

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

4

2 回答 2

2

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

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

于 2013-03-01T07:38:19.430 回答
2

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

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

于 2013-03-01T07:38:32.210 回答