2017-09-19 1 views
0

Hallo Ich habe eine Tabelle, dessen NamenSQL Server Verwendung SCOPE_IDENTITY() zum Einsatz in mit ausgewähltem Befehl

PERSO_DATA(Id,refPerso,,Col1,Col2,Col3,Col4,Col5) 

und ich habe

PERSO_DATA_QUEUE(Id,refPersoData,refVideo) 

Zunächst werde ich Daten zu PERSO_DATA einfügen dann I nimmt die ID der eingefügten Daten und fügt sie als refPersoData in eine andere Tabelle ein.

INSERT INTO PERSO_DATA(refPerso,Col1,Col2,Col3,Col4,Col5) 
     SELECT @refPerso,pa.Col1,pa.Col2,pa.Col3,pa.Col4,pa.Col5 FROM #PERSODATA pa 
    SET @refPersoData=SCOPE_IDENTITY() 

Wenn ich schreibe, dass ich alle Daten einfügen, aber die ID für jeden Datensatz nicht nehmen

INSERT INTO PERSO_DATA_QUEUE(refVideoQueue,refPersoData) 
     SELECT @refVideoQueue,@refPersoData 

so angezeigten Code nur hinzufügen one.But Ich möchte, wenn ich 10 Daten müssen Einfügen PERSO_DATA Ich muss auch PERSO_DATA_QUEUE Tabelle 10 Daten mit eingelegten Ids einfügen.

Wie kann ich das tun? Ich konnte keine Lösung finden. wie ROW_NUMBER() in der temporären Tabelle -

Vielen Dank im Voraus

+0

Ich glaube, Sie für diese – GuidoG

+7

einen Cursor benötigen, können Sie eine 'OUTPUT' Klausel der' INSERT' Anweisung verwenden, um mehrreihigen Einsätze zu behandeln. Die virtuelle eingefügte Tabelle enthält die zugewiesenen Identitätswerte, sodass Sie SCOPE_IDENTITY() nicht verwenden müssen. Siehe https://docs.microsoft.com/en-us/sql/t-sql/queries/output-clause-transact-sql –

+0

Schreiben Sie 'Trigger einfügen' in die PERSO_DATA-Tabelle. –

Antwort

1

diesen Code Versuchen:

CREATE TABLE #temp ([Id] [bigint] NOT NULL); 

INSERT INTO PERSO_DATA(refPerso,Col1,Col2,Col3,Col4,Col5) 
    OUTPUT INSERTED.Id 
    INTO #temp (Id) 
    SELECT @refPerso,pa.Col1,pa.Col2,pa.Col3,pa.Col4,pa.Col5 
     FROM #PERSODATA pa; 

INSERT INTO PERSO_DATA_QUEUE(refVideoQueue,refPersoData) 
    SELECT @refVideoQueue, Id 
     FROM #temp; 
+0

Diese Antwort ist eigentlich was ich will. Danke –

+0

@ Çağrı, froh, Ihnen zu helfen –

-1

Die Lösung kann entweder Cursor oder Schleife und jede Iterator werden kombiniert. Dann - verwenden Sie SCOPE_IDENTITY(), um IDENTITY-Wert zu erstellen.

+0

Keine Schleife ist nicht der beste Weg, damit umzugehen. Sie sollten stattdessen die OUTPUT-Klausel verwenden. Trotzdem ist dies keine Antwort, da es eine vage Vermutung ist. –

+0

Ich habe nie gesagt, dass es der beste Weg ist, da der Cursor immer nicht die beste Lösung ist. Das ist eine der Möglichkeiten, die verwendet werden können. –

+0

sie sind fast nie die beste Lösung. – user2366842

Verwandte Themen