2012-04-11 41 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) ...... 
相关问题