none
DynSQL, Rückgabe als Tabelle möglich?

    Frage

  • Hallo zusammen,

    ich muss dynamische SQL verwenden da ich alle Datenbanken auf dem Server durchgehen muss die einem bestimmten Muster im Datenbanknamen entsprechen.

    Bisher hatte ich nur single Values zum abfragen die ich dann in eine temporäre Tabelle geschrieben habe um am schluss eine Auswertung über alle Angaben machen zu können.

    Nun muss ich pro Datenbank eine Tabelle auslesen, in der von 0 bis x Einträge sein können.

    Was mich nun interessiert, wie kann ich über den output-Patameter mehr als ein Wert abfragen?

    Viele Grüsse,
    Maximilian

    Dienstag, 10. Dezember 2013 20:18

Antworten

  • Hallo Maxi,

    z. B.:

    CREATE PROC dbo.InsertExec
    	@wert int = 1
    AS
    	SELECT @wert AS Wert, @wert * @wert AS WertQuadrat;
    	RETURN 0;
    GO
    
    CREATE TABLE #Werte (Wert int, WertQuadrat int);
    
    INSERT INTO #Werte (Wert, WertQuadrat)
    EXEC dbo.InsertExec 42;
    
    SELECT * FROM #Werte;
    Gruß Elmar

    • Als Antwort markiert MaxiTesch Freitag, 13. Dezember 2013 21:00
    Freitag, 13. Dezember 2013 13:35
    Beantworter

Alle Antworten

  • Hallo Maximilian,

    Tabellenwert-Parameter sind nur als Eingabe verwendbar und schreibgeschützt.

    Bei Ausgabe-Parametern bist Du auf skalare Werte oder einen Cursor beschränkt, siehe CREATE PROCEDURE.

    Möglich (wenn auch etwas mühselig) wäre ein XML-Parameter. Oder aber Du gibst das Ergebnis am Ende als SELECT Resultset zurück und fügst es via INSERT EXEC in eine (temporäre) Tabelle ein.

    Gruß Elmar

    Mittwoch, 11. Dezember 2013 09:05
    Beantworter
  • Hallo Elmar,

    vielen Dank für die Antwort, nicht ganz was ich gerne hätte :-)

    Ich denke dann versuche ich eine globale temporäte Tabelle zu erstellen um dann die Werte aus dem dynSQL dort abzulegen.

    Lieber wäre es mir natürlich wenn ich das Result aus dem dynSQL an eine Tabelle geben könnte.

    Gruss,
    Maximilian

    Donnerstag, 12. Dezember 2013 16:58
  • Hallo Elmar,

    noch eine Rückfrage weil ich gerade noch hänge.

    Hast Du mir ein Beispiel für die Rückgabe des Resultset in eine temporäre Tabelle? Bin nicht sicher ob ich das verstehe was Du gemeint hast.

    Gruss,
    Maximilian

    Donnerstag, 12. Dezember 2013 21:40
  • Hallo Maxi,

    z. B.:

    CREATE PROC dbo.InsertExec
    	@wert int = 1
    AS
    	SELECT @wert AS Wert, @wert * @wert AS WertQuadrat;
    	RETURN 0;
    GO
    
    CREATE TABLE #Werte (Wert int, WertQuadrat int);
    
    INSERT INTO #Werte (Wert, WertQuadrat)
    EXEC dbo.InsertExec 42;
    
    SELECT * FROM #Werte;
    Gruß Elmar

    • Als Antwort markiert MaxiTesch Freitag, 13. Dezember 2013 21:00
    Freitag, 13. Dezember 2013 13:35
    Beantworter
  • Hallo Elmar,

    vielen Dank, jetzt habe ich es kapiert, klappt wunderbar :-)

    Gruss,
    Maximilian

    Freitag, 13. Dezember 2013 21:00