0

我已经“继承”了一些我很难使用的代码。该应用程序具有将成员导入成员表的excel导入功能,并被SqlBulkCopy使用。

几个月前,添加了一个联结表,并且必须在成员表中添加两个属性,以便应用程序正常工作。没有硬耦合(没有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

抱歉,这次我不能提供任何代码:/ 真的希望有人能给我任何建议!

4

1 回答 1

0

目前尚不清楚您究竟是什么以及如何将 Excel 导入的数据存储到这两个表中,以及这些数据的groupID来源......

基本上 - 你是对的 - 你不能批量插入到多个表中。所以我的看法是:

Staging1)像今天一样从Excel批量插入表格

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) ......
于 2012-04-11T21:01:06.553 回答