2012-04-11 51 views
0

我'繼承'了一些我很難處理的代碼。該應用程序具有將成員導入成員表的Excel導入功能,並且使用SqlBulkCopy如何將類似數據批量複製到SQL Server 2005中的兩個表?

幾個月前,添加了一個聯結表,並且必須添加members表中的兩個屬性,以使應用程序正常工作。沒有硬耦合(沒有PK,FK - 不是我的選擇!)。

我不知道如何解決這個問題,因爲據我所知,你不能批量複製到兩個表,你將不得不單獨做。但是,如何以最佳方式(對性能影響較小)檢索新導入成員的GUID屬性以及其他屬性值(groupId)?

實施例:

Excel的導入:

Name 
Email 
plus more 

表1

name 
personID (GUID) 
groupID (same for all imported members) 
+ other attributes 

表2

personID (GUID) 
groupID (same for all imported members) 
+ other 'new' attributes 

抱歉,我不能提供任何代碼此時:/真的希望有人可以放棄我有任何建議!

+0

你是對的 - 你不能做到這一點,批量導入只能到一個表。所以基本上做到這一點:(1)像今天一樣,將數據批量導入到「分段」表中。然後(2)將該表從暫存表中拆分爲兩個實際表格 – 2012-04-11 20:43:45

+0

如何以及從哪裏獲得該「GroupID」?你究竟在做什麼?從「Excel導入」插入到「Table1」中,然後您需要從該表中取回一些數據以插入「Table2」?你可以嘗試從你的Excel導入中解釋一行,確切地說你在做什麼?所有步驟,涉及的所有數據... – 2012-04-11 20:50:26

回答

0

這不是很清楚究竟你想究竟如何從Excel導入將數據存儲到這兩個表,並在該groupID來自....

基本上 - 你」右鍵 - 不能批量插入多個表格。所以,我採取將是:

1)不要從Excel批量插入到一個Staging表作爲今天

2)然後插入你需要Table1來存儲這些信息和輸出你所需要的必要的信息爲Table1「連接」的比特位爲Table2 - 沿着線的東西:

DECLARE @Connection TABLE (GroupID INT, PersonID UNIQUEIDENTIFIER, EMail VARCHAR(500)) 

INSERT INTO dbo.Table1 (list of columns here) 
    OUTPUT Inserted.GroupID, Inserted.PersonID, Inserted.EMail 
     INTO @Connection(GroupID, PersonID, EMail) 
    SELECT 
     (list of columns here) 
    FROM 
     dbo.Staging 
    WHERE 
     (possibly a condition here???) 

這將插入來自Staging行到您的Table1,雖然這樣做,會寫一些資料,請每插入一行 - GroupID,PersonIDEMail

有了這些信息,你應該能夠插入也是你的價值觀爲Table2

INSERT INTO dbo.Table2 (GroupID, PersonID, EMail, list of other columns here) 
    SELECT 
     c.GroupID, c.PersonID, c.EMail, 
     (list of other columns from Staging table here) 
    FROM @Connection c 
    INNER JOIN dbo.Staging s ON c.EMail = s.EMail -- or use whatever you can use to 
                -- connect the two sets of data 
    WHERE (condition) ...... 
相關問題