none
Insert into innerhalb eines Select RRS feed

  • Frage

  • Hallo zusammen,

    kurze Frage...

    Üblicherweise verwende ich ein Cursor wenn ich Aktionen in einer Schleife durchführen will. Da das aber nicht wirklich performant ist und ich eine Abfrage plane innerhalb der sehr viele Durchgänge anstehen werden, wollte ich mal fragen ob man ein Insert into... auch innerhalb eines Select durchführen kann.

    Innerhalb meines Cursor wird eine temporäre Tabelle mehrfach gefüllt, also pro Durchgang sind dort von 1 bis x Einträge vorhanden.

    Daraus muss ich eine weitere Abfrage erstellen wie
    Insert into #WBresult EXEC [dbo].[usp_GetIDForResult] @currentID

    Das heisst, obige Abfrage soll 1 bis x mal ausgeführt werden und füllt eine weitere temporäre Tabelle mit Angabe der aktuellen ID, die sich aus dem Select ergibt.

    Im Prinzip auch durch ein Cursor zu machen, aber evtl geht das etwas einfacher?

    Viele Grüsse,
    Maximilian

    Sonntag, 4. Dezember 2016 15:31

Antworten

Alle Antworten

  • Hallo Maximilian,

    ich verstehe zwar nicht wofür du den Cursor brauchst aber das Einfügen von Daten in eine neue / andere Tabelle geht ganz einfach

    SELECT Spalte1, spalte2, spalte3,
    INTO ZIELTABELLE
    FROM QUELLTABELLE
    WHERE SPALTE1 = SPALTE2
    GO 

    https://msdn.microsoft.com/de-de/library/ms188029.aspx


    Benjamin Hoch
    MCSE: Data Platform
    MCSE: Data Management and Analytics
    MCSA: SQL Server 2012/2014
    MCSA: Windows Server 2012
    Blog

    Sonntag, 4. Dezember 2016 19:28
  • Hallo Benjamin,

    ich habe es etwas umständlich beschrieben was ich meine...

    Hier mal ein gedachter Ablauf, der aber natürlich nicht geht :-):

    if OBJECT_ID (N'tempdb..#temp1', N'U') is not null
    drop table #temp1;
    
    create table #temp1
    (
    	UnitID nvarchar(max)
    );
    
    insert into #temp1 (UnitID) values
    	('29B764E8-C987-48AB-B65E-F5C9012FFE25'),
    	('0f6d4932-3db2-4f58-940e-4fdc7cec938b'),
    	('267e0ffa-3b6f-4d7d-9b7c-273e682b968c')
    ;
    
    select
    	(insert into #temp2 select * from exec [dbo].[usp_GetInformationWB] UnitID)
    from
    	#temp1

    Das wäre in etwa der gedachte Ablauf, in der #temp1 sind die ID's enthalten mit denen die SP aufgerufen wird und deren Result in #temp2 eingefügt werden soll.

    Ich denke ein Cursor ist weiter die Wahl der Stunde, ein For ... Next als Schlaufe gibt es ja leider nicht und eingene SP's darf ich nicht erstellen.

    Viele Grüsse,
    Maximilian

    Montag, 5. Dezember 2016 06:34
  • Hallo

    Was genau die Prozedur machen soll, kann ich hier nicht nachvollziehen.

    Aber mit einem INSERT INTO... SELECT kann man Zeilen auf Basis einer bestehnden Tabelle in eine andere Inserten.



    Andreas Wolter (Blog | Twitter)
    MCSM: Microsoft Certified Solutions Master Data Platform/SQL Server 2012
    MCM SQL Server 2008
    MVP Data Platform
    www.SarpedonQualityLab.com | www.andreas-wolter.com

    Montag, 5. Dezember 2016 08:33