【问题标题】:How to bulk copy similar data to two tables in SQL Server 2005?如何在 SQL Server 2005 中将相似数据批量复制到两个表中?
【发布时间】:2012-04-11 20:26:22
【问题描述】:

我“继承”了一些我很难处理的代码。该应用程序具有将成员导入成员表的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

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

【问题讨论】:

  • 你是对的 - 你不能这样做,批量导入只能用于单个表。所以基本上这样做:(1)​​将您的数据批量导入“暂存”表 - 就像今天一样。然后 (2) 将该表从临时表拆分为两个实际表
  • 你是如何以及从哪里得到GroupID的???你到底在做什么?从“Excel 导入”插入Table1,然后您需要从该表中取回一些数据以插入Table2 ??您能否尝试从 Excel 导入中准确解释您在做什么?所有步骤,所有涉及的数据......

标签: sql sql-server-2005 sqlbulkcopy


【解决方案1】:

目前还不清楚究竟是什么,以及您试图将 Excel 导入的数据存储到这两个表中的具体方式,以及 groupID 的来源...... p>

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

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 中,同时它会为插入的每一行写出一些信息——GroupIDPersonIDEMail

有了这些信息,您应该还可以将您的值插入到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) ......

【讨论】:

    猜你喜欢
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 2012-05-07
    • 1970-01-01
    • 2012-09-16
    • 1970-01-01
    • 2011-12-03
    • 1970-01-01
    相关资源
    最近更新 更多