2013-03-01 96 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語句,然後基於此插入。這種方式更有效率。

由於您已經知道要插入的內容,因此您應該能夠在選擇查詢中處理此問題,而不必查看已插入的內容。