2013-07-10 147 views
0

批量插入3個文本文件,每個文本文件包含1個lac記錄到test1表中。批量插入到SQL Server 2005中

3個文件中的每一個都有公司代碼和作品集。如果test1表中已經存在compcode和folio,那麼我必須使用文本文件中的特定記錄更新表,否則將其插入。

但我的查詢花了很多時間。 test1表具有70列

MMY邏輯:

  1. 在虛設表
  2. 導入數據比較虛設的每一行與TEST1表
  3. if exists (select * from #dummy , test1 where condition) 
    begin 
        update test1 
        set col = (#dummy.col).. 
        inner join #dummy on (condition) 
    end 
    
  4. else insert 
    

由於記錄是在超過30分鐘lacs ..如何我可以證明查詢?

+0

過得好比較虛擬表的行與test1表? –

+0

condition =#dummy.companycode +#dummy.folio = test1.companycode + test1.folio –

回答

0

我假設您使用BULK INSERT將數據插入到臨時表中,或者您可以使用SQL Server中的導入嚮導導入它。之後,您可以使用下面的查詢。

儘管你已經有if(exist)它只會更新表中存在的行。因此,如果刪除和其他如下圖所示,直接編寫查詢:如下圖所示

update test1 
set col = (#dummy.col).. 
from test1 
inner join #dummy on (test1.companycode =#dummy.companycode and test1.folio = #dummy.companycode) 

,用來插入不test1的退出,你可以使用左連接記錄:

Insert into test1 
select column names 
from 
#dummy left join test1 
on test1.companycode =#dummy.companycode and test1.folio = #dummy.companycode 
where test1.companycode is null 
and test1.folio is null 
+0

nil我會測試解決方案,並讓你知道abt的時間也.. –

+0

無與它相同的時間,我導入第一個文件它的插入速度很快,但第二個文件有一萬條記錄佔用了無限的分鐘,我在45分鐘後取消了操作。因此,這個更新還有其他任何邏輯插入 –