Oft muss ich etwas wie das Folgende schreiben, wenn ich mich mit SQL Server beschäftige.
create table #table_name
(
column1 int,
column2 varchar(200)
...
)
insert into #table_name
execute some_stored_procedure;
Das Erstellen einer Tabelle mit der genauen Syntax als Ergebnis einer gespeicherten Prozedur ist jedoch eine mühsame Aufgabe. Zum Beispiel hat das Ergebnis von sp_helppublication 48 Spalten! Ich möchte wissen, ob es einen einfachen Weg gibt, dies zu tun.
Vielen Dank.
sql-server
t-sql
stored-procedures
Nur ein Anfänger
quelle
quelle
Antworten:
Wenn die Prozedur nur eine Ergebnismenge zurückgibt und die Option für verteilte Ad-hoc-Abfragen aktiviert ist.
Oder Sie können einen Loopback-Verbindungsserver einrichten und diesen stattdessen verwenden.
quelle
SET FMT_ONLY ON
?In SQL Server 2012 und höher können Sie
sys.dm_exec_describe_first_result_set
lokal verwenden, vorausgesetzt, die gewünschte Ergebnismenge ist das erste Ergebnis:Ergebnis:
Beachten Sie, dass es eine Einschränkung gibt: Wenn Ihre gespeicherte Prozedur # temporäre Tabellen erstellt, funktioniert die Metadatenfunktionalität nicht. Aus diesem Grund habe ich sp_who2 nicht verwendet. :-)
quelle
SELECT @sql += *expression*
Syntax irgendwo dokumentiert? sollte einORDER BY
enthalten sein, um es stabil zu machen?ORDER BY
Es ist bekannt , dass dies weniger stabil ist . Wenn Sie möchten, dass die Ergebnisse in einer vorhersehbaren Reihenfolge angezeigt werden, verwenden SieFOR XML PATH
oder, wenn die Version von SQL Server neu genug istSTRING_AGG
.+=
Zeichenfolge verknüpft . Hier+=
wird dokumentiert . Aber danke!Nein. Das Ergebnis einer gespeicherten Prozedur kann sehr unterschiedlich sein: Es ist nicht so konzipiert, dass immer genau eine Ergebnismenge wie ein SELECT für ein Objekt zurückgegeben wird.
Sie müssen CREATE TABLE ausführen
quelle
Ich würde eine Prozedur schreiben, um die Tabelle für mich zu generieren:
Dann nenne es mit:
Hinweis : Ersetzen Sie "YOUR_PROCEDURE_NAME_HERE" durch den Namen Ihrer eigenen gespeicherten Prozedur.
Hinweis : Ersetzen Sie YOUR_TABLE_NAME_HERE durch den Tabellennamen Ihrer Wahl.
Das oben Genannte wird ungefähr so aussehen:
quelle