2017-07-19 1 views
1

ich zur Zeit auf irgendeine Art von Datenzuordnung arbeiten. Können sagen, ich die folgenden drei Tabellen:On-Einsatz, Ausgabespalten, die eingefügt wern't aber in verknüpften Tabellen

TemporaryTable

 
RUNID | DocId | Amount 
E  7  50 
C  6  12 

Table1

 
T1ID | DocID | Amount 
1  5  10 
2  6  20 
3  6  50 

Table2

 
T2ID | RUNID | T1Id 
1  B  1 
2  C  2 
3  D  3 

In Tabelle Table1 und Table2 die Spalten T1ID und T2ID sind Identität Spalten, die automatisch ausgefüllt werden. Was ich jetzt tun möchte, ist, die Werte von TemporaryTable in Table1 einzusetzen und den Wert in Spalte RunID von TemporaryTable und die neu T1ID-Table2

Die resultierende Tabelle sollte wie folgt aussehen erzeugt sparen:

Table1

 
T1ID | DocID | Amount 
1  5  10 
2  6  20 
3  6  50 
4  7  50 
5  6  12 

Table2

 
T2ID | RUNID | T1Id 
1  B  1 
2  C  2 
3  D  3 
4  E  4 
5  C  5 

Ich möchte so mit Hilfe der output Anweisung tun. So etwas wie dieses:

CREATE TABLE #map(T1ID, RUNID) 
INSERT INTO Table1(DocId, Amount) 
OUTPUT inserted.T1ID, t.RunId INTO #map 
SELECT t.DocId, t.Amount 
FROM TemporaryTable t 

Dies funktioniert offensichtlich nicht, da ich keinen Zugriff auf t.RunId in der Ausgabe-Anweisung habe. Wie könnte das gemacht werden?

+0

Ich bin nicht sicher zu simulieren, wenn dies als Duplikat geschlossen werden soll, aber hier sind zwei sehr ähnliche Fragen (mit Antworten): https://stackoverflow.com/questions/41184310/insert-into-merge-select-sql-server/41184461#41184461 Und die zweite: https://stackoverflow.com/questions/ 38213008/t-sQL-Insert-data-in-Eltern-Kind-Tabellen –

Antwort

4

Sie MERGE Befehl mit einiger immer-false Bedingung verwenden können Ihre Einlage mit allen verfügbaren Spalten in OUTPUT

MERGE Table1 t1 
USING TemporaryTable t 
    ON 1=2 
WHEN NOT MATCHED THEN 
    INSERT (DocId, Amount) 
    VALUES (t.DocId, t.Amount) 
    OUTPUT inserted.T1ID, t.RunId 
    INTO #map ; 
+0

Vielen Dank für Ihre Hilfe! Endlich ein echter Vorteil von MERGE! –

Verwandte Themen