2010-11-21 14 views
1

Gibt es eine Möglichkeit, die Identitätswerte unmittelbar vor einem Einfügen und die neuen Identitätswerte unmittelbar nach einem Einfügen in eine Mapping-Tabelle zu speichern? Die Zuordnungstabelle wird verwendet, um Fremdschlüssel in anderen Tabellen zu aktualisieren.Identität vor und nach einem Einfügen speichern?

Anfangs dachte ich, dies wäre mit der OUTPUT INTO-Klausel möglich, aber nur die eingefügten Werte sind einfügbar. Ich bin mir nicht sicher, wie ich die OUTPUT-Klausel selbst verwenden kann, um die Aufgabe zu erledigen. Vielleicht eine Art Unterabfrage?

Vielleicht ist das alles zu kompliziert und es gibt eine Möglichkeit, SCOPE_IDENTITY und Unterabfragen dazu zu verwenden.

Jede Hilfe würde sehr geschätzt werden.

p.s. Ja, ich weiß, dass ich das lösen kann, indem ich Identitäten 'reserviere' (Dummy-Zeilen einfügen und dann DBCC CHECKINDENT lösche), die neu 'reservierten' Identitäten und die alten Identitäten in der Zuordnungstabelle speichern, die Tabelle mit den neuen Identitäten aktualisieren und schließlich macht eine Einfügung mit INSERT_IDENTITIES eingeschaltet - aber das ist chaotisch.

Dies gilt für SQL Server 2008R2.

Hier ist, was nicht funktioniert:

INSERT 
    [SomeTable] 
    OUTPUT 
      INSERTED.[Id], 
      [Id] -- This doesn't work 
     INTO 
      [#mappingTable] 
SELECT 
    (SomeColumns) 
FROM 
    [#someOtherTable]; 

Antwort

0

Es kann mit einer MERGE statment und einer OUTPUT-Klausel durchgeführt werden. Schade, dass niemand mit dieser Information geantwortet hat, mein Kollege hat es mir gezeigt.

0

Sie nicht im Voraus wissen kann, was die Identität sein.

Und die OUTPUT-Klausel funktioniert nur für die Tabelle, die Sie eingefügt haben, nicht die Quellentabellen. Ich habe mir das auch gewünscht: wäre nützlich.

So können Sie nur erneut abfragen, um die inserted-Tabelle (wie unten) oder UPDATE #mappingTable

INSERT 
    [SomeTable] 
SELECT 
    (SomeColumns) 
FROM 
    [#someOtherTable]; 

SELECT 
    ID, stuff 
FROM 
    SomeTable 
+1

Bummer, dies kann nicht mit einem UPDATE auf die Mapping-Tabelle mit einem CTE, das die Einfügung tut und eine OUTPUT-Klausel die neue Identität zurückgibt getan werden? – user514848

Verwandte Themen