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)

このクエリは最初に選択してすべてを挿入しますか、それとも選択した各項目を 1 つずつ挿入しますか? 以前に挿入されたレコードに応じてレコードを挿入しようとしているのですが、うまくいかないようです。

4

2 に答える 2

2

これはselectステートメントを1回実行し、それに基づいて挿入します。その方がはるかに効率的です。

何を挿入するかはすでにわかっているので、すでに挿入したものを見るのではなく、選択クエリでこれを処理できるはずです。

于 2013-03-01T07:38:19.430 に答える
2

最初に選択クエリが実行されます。したがって、フィルターに一致するすべての行が選択されます。その後、挿入が実行されます。1 つの操作を使用する場合、行ごとの挿入はありません。

それでも、各挿入後にチェックする再帰的なことをしたい場合は、CTE (Common Table Expressions) を使用できます。http://msdn.microsoft.com/en-us/library/ms190766(v=sql.105).aspx

于 2013-03-01T07:38:32.210 に答える