0

作業に苦労しているコードを「継承」しました。アプリケーションには、メンバーをメンバー テーブルにインポートする Excel インポート機能があり、SqlBulkCopy使用されます。

数か月前にジャンクション テーブルが追加され、アプリケーションが適切に機能するためには、メンバー テーブルの 2 つの属性もそこに追加する必要があります。ハードカップリングはありません (PK、FK はありません - 私の選択ではありません!)。

これを解決する方法がわかりません。私が知る限り、2 つのテーブルに一括コピーすることはできないため、個別に行う必要があります。しかし、新しくインポートされたメンバーの 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インポートからのデータをこれらの2つのテーブルに正確に、どの程度正確に保存しようとしているのか、そしてそれがどこからgroupID来ているのかは明確ではありません。

基本的に-その通りです-複数のテーブルに一括挿入することはできません。だから私の見解は次のようになります:

Staging1)今日のようにExcelからテーブルに一括挿入します

2)次に、格納する必要のある情報を挿入し、ビットを次Table1のビットに「接続」するために必要な情報を出力します。Table1Table2

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、その間、挿入された各行の情報(、、および)が書き出さGroupIDPersonIDますEMail

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 に答える