Dynamische-Abfrage-Ergebnisse in eine temporäre Tabelle oder eine Tabellenvariable
Ich habe eine gespeicherte Prozedur, die verwendet sp_executesql generiert eine Ergebnismenge, die Anzahl der Spalten im Ergebnis kann variieren, liegen aber in form von Col1 Col2 Col3 etc.
Ich brauche, um das Ergebnis in eine temp-Tabelle oder table-Variablen, damit ich damit arbeiten kann. Das problem ist, ich brauchen, um zu definieren die Spalten der temporären Tabelle, die ich nicht tun, die dynamisch mithilfe von sp_executesql der Umfang der temp-Tabelle verloren, wenn der Befehl ausgeführt wird.
Ich spielte mit der Idee, Globale temporäre Tabellen, da der Umfang erlaubt es, dynamisch erstellt werden, es ist jedoch eine sehr gute chance, die Globalen Temps aktualisiert würde durch die gleichzeitige Ausführung von diesem Prozess.
Irgendwelche Ideen?
duplizieren- stackoverflow.com/questions/840968/...
Nicht ein Duplikat ist, habe ich ausgeschlossen, die Verwendung von Globalen temporären Tabellen als eine Lösung für mich.
InformationsquelleAutor SausageFingers | 2011-05-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe ich eine Lösung gefunden, die funktioniert bei mir mit der Hilfe von @SQLMenace in diesem Beitrag T-SQL Dynamische SQL-und Temp-Tabellen
Kurzum, ich brauche zum erstellen einer Tabelle #temp im normalen SQL erste, dann kann ich ändern, die Struktur durch weitere dynamische SQL-Anweisungen. In diesem Beispiel @colcount auf 6 gesetzt ist. Diese wird bestimmt durch eine andere gespeicherte Prozedur, wenn ich diese auch umzusetzen.
Ich habe eine Reihe von anderen gespeicherten Prozeduren und udf ' s, die Parsen, die ersten paar tausend chars der Rohdaten und konvertieren Sie es in eine xml-Zeichenfolge, die ich dann werfen Sie in ein xml-Typ. Dann habe ich mithilfe einer xquery-finden Sie die maximale Anzahl der Spalten aus dem Beispiel:
SELECT @colcount = max(r.r.value('count(./data)','int')) FROM @xml.nodes('/root/r') r(r)
InformationsquelleAutor SausageFingers
Können Sie Globale temporäre Tabellen, deren Namen auf 'uniquified' durch die SPID des schaffenden Prozess. Dies kann Ihnen erlauben, zu vermeiden, stampfen auf andere Globale temporäre Tabellen erstellt, die von anderen verbindungen.
Nur stellen Sie sicher, um Sie sauber zu machen, wenn du fertig bist... 🙂
Ich habe das in Betracht ziehen, aber wie würdest du die Abfrage der temp-Tabelle? SELECT * FROM @tmpTableName ist nicht erlaubt, so würden Sie haben, um zu starten mit dynamischem sql für die Abfrage der Ergebnisse. Fühlt sich einfach falsch
alles hier fühlt sich falsch an - wir tun vielleicht besser, wenn Sie beschreiben das ursprüngliche problem, anstatt dieser gebrochen, halb-Lösung, die scheint nicht zu funktionieren.
Ich bin eine flache csv-Import (unbekannter Struktur) in einer einzigen nvarchar(max) - Feld. Ich bin dann konvertieren Sie den text in eine xml-Stuktur und mithilfe von xquery, um die Struktur der Daten in eine Tabelle. Dies ist, wo ich bin. Dann möchte ich zum Durchlaufen der Zeilen und der Blick für wichtige bits von Informationen, damit ich mich bewerben kann business-Logik auf die Ergebnisse. Es gibt viele Gründe, warum ich bin, dies zu tun in einer Weise, die am besten diskutiert werden, in einem anderen thread. Jedenfalls habe ich die Antwort gefunden auf mein problem nun, ich werde es posten kurz.
InformationsquelleAutor mwigdahl
Gibt es irgendeinen Grund, warum Sie etwas nicht tun können, wie:
SELECT INTO
nicht erforderlich, eine explizite Feldliste.Dies ist eine schreckliche Idee. Hierdurch werden tempdb die ganze Zeit Ihre Abfrage ausgeführt wird. Dies wird schwerwiegende Probleme verursachen, wenn es ist, eine lang laufende Abfrage
Ah, ich denke, nur ein altes Vorurteil. Es Tat dies in der älteren version von SQL Server, aber anscheinend hat es behoben.
InformationsquelleAutor JNK