Come eseguire il bulk di dati simili su due tabelle in SQL Server 2005?

sql sqlbulkcopy sql-server-2005

Domanda

Ho "ereditato" del codice con cui sto facendo fatica a lavorare. L'applicazione ha una funzione di importazione excel per importare membri in una tabella di membri e viene utilizzato SqlBulkCopy .

Alcuni mesi fa è stata aggiunta una tabella di giunzione e due degli attributi nella tabella dei membri devono essere aggiunti anche lì affinché l'applicazione funzioni correttamente. Non ci sono accoppiamenti duri (no PK, FK - non è la mia scelta!).

Non sono sicuro di come risolvere questo problema, perché, per quanto ne so, non è possibile eseguire il bulkcopy su due tabelle, ma dovrai farlo separatamente. Ma come posso recuperare l'attributo GUID dei nuovi membri importati così come gli altri valori degli attributi (groupId) nel modo migliore (basso impatto sulle prestazioni)?

Esempio:

Excel-import:

Name
Email
plus more

Tabella 1

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

Tavolo 2

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

Spiacente, non posso fornire alcun codice questa volta: / Spero davvero che qualcuno possa darmi qualche consiglio!

Risposta popolare

Non è chiaro cosa esattamente e in che modo stai provando a memorizzare i dati dall'importazione di Excel in queste due tabelle e da dove proviene il groupID ....

Fondamentalmente, hai ragione, non puoi inserire in blocco più tabelle. Quindi la mia opinione sarebbe:

1) Inserisci in Staging da Excel in una tabella di gestione Staging come oggi

2) Quindi inserisci le informazioni che ti servono per memorizzare in Table1 e Table1 le informazioni necessarie per "connettere" i bit di Table1 ai bit per Table2 - qualcosa sulla falsariga di:

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???)

Ciò inserirà le righe da Staging nella Table1 e, mentre lo farà, scriverà alcune informazioni per ogni riga inserita: GroupID , PersonID ed EMail .

Con queste informazioni, dovresti essere in grado di inserire anche i tuoi valori in 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) ......


Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow