Gibt es einen Weg über Metadaten (Information_Schema, vielleicht?), Um eine Liste der Spalten zu erhalten, die ein Sproc zurückgibt? Ich versuche, einige Codegenerierung zu automatisieren, und das würde enorm helfen ...Abrufen von Spaltennamen/Typen, die von einer gespeicherten Prozedur zurückgegeben werden
Antwort
Wenn Sie nicht bereit sind, den Inhalt von ROUTINE_DEFINITION in INFORMATION_SCHEMA.ROUTINES zu analysieren, dann ist Ihre beste Wette, die Prozeduren auszuführen und zu lesen die Spalteninformationen aus den zurückgegebenen Datensätzen.
In .NET können Sie dies tun, indem Sie die Ergebnisse der gespeicherten Prozedur in eine DataTable lesen und die Columns-Eigenschaft abfragen.
Der Grund, warum es keine einfache Möglichkeit gibt, dies zu tun, ist, dass eine gespeicherte Prozedur möglicherweise unterschiedliche Ergebnismengen basierend auf den Parametern zurückgeben kann. Es gibt kein festes Resultset-Format, wie es bei benutzerdefinierten Funktionen der Fall ist.
bearbeiten
Wie in der anderen Antwort erwähnt, müssen Sie SET FMTONLY ON verwenden keine Daten, um sicherzustellen, wird zurückgegeben. Es gibt einige Situationen, in denen SET FMTONLY nicht funktioniert, z. Wenn Sie #temp-Tabellen in Ihren gespeicherten Prozeduren verwenden, gibt es eine workaround.
Ich habe gerade Profiler ausgeführt, um zu sehen, wie Visual Studio dies für das stark typisierte Dataset Drag & Drop macht.
Dies ist der Code, der gesendet wurde.
SET NO_BROWSETABLE ON;
SET FMTONLY ON;
exec dbo.aspnet_Roles_GetAllRoles @ApplicationName=NULL
Also nehme ich an, dass es keinen "offiziellen" Weg geben könnte.
Offensichtlich müssen Sie berücksichtigen, dass eine einzige gespeicherte Prozedur abhängig von den übergebenen Parametern mehrere Ergebnismengen oder unterschiedliche Ergebnismengen zurückgeben kann.
Für Menschen auf 2012+ ein anderer Ansatz könnte sp_describe_first_result_set
Mein Weg, dies zu tun verwenden sein: Bearbeiten der gespeicherten Prozedur einer INTO-Klausel zu haben:
ändern
Select * from tablename
zu
Select * INTO _tablename FROM tablename
Dies erstellt ein Tabelle in der Datenbank. Verwenden Sie dann SELECT * FROM INFORMATION_SCHEMA WHERE TABLE_NAME = '_tablename'
Vergessen Sie nicht, die Änderung an der Sproc rückgängig zu machen.
- 1. Anzahl der Datensätze einer Tabelle abrufen, die von der gespeicherten Prozedur zurückgegeben werden
- 2. TSQL - Auswertung des Ausführungsplans zum Ermitteln von Spalten, die von einer gespeicherten Prozedur zurückgegeben werden
- 3. Exit von einer gespeicherten Prozedur
- 4. Auftrag von einer gespeicherten Prozedur
- 5. Wie kann ich Rückgabewerte abrufen, die von gespeicherter Prozedur zurückgegeben werden, die InsertOnSubmit in LINQ
- 6. wie effizient Tausende von Zeilen aus einer gespeicherten Prozedur abrufen
- 7. Vorherige Version einer gespeicherten Prozedur abrufen
- 8. Aufrufen einer gespeicherten Prozedur von Perl
- 9. Abfrage von Ergebnissen einer gespeicherten Prozedur
- 10. Wie kann ich die Anzahl der Datensätze abrufen, die von einer gespeicherten Prozedur betroffen sind?
- 11. Suchen einer gespeicherten Prozedur
- 12. Was ist der effizienteste Weg, um die Ergebnisse einer gespeicherten Prozedur von einer anderen gespeicherten Prozedur aus zu zählen?
- 13. Wie Prozedur eine Datentabelle von einer gespeicherten
- 14. Wie zähle ich die Anzahl der Ergebnismengen, die von einer gespeicherten Prozedur zurückgegeben werden? (SQL Server 2012)
- 15. Ausführen einer gespeicherten Prozedur innerhalb einer gespeicherten Prozedur
- 16. Get in einer anderen gespeicherten Prozedur Rückgabewert von gespeicherten Prozedur in SQL
- 17. Mysql Call Gespeicherte Prozedur von einer anderen gespeicherten Prozedur
- 18. DataSet-Tabellenname aus einer gespeicherten Prozedur
- 19. Wie skalaren Wert von gespeicherten Prozedur (ADO.NET) abrufen
- 20. Daten aus zwei Tabellen aus einer gespeicherten Prozedur abrufen?
- 21. Rückgabewert von gespeicherten Prozedur nicht
- 22. Wie unterdrücke ich die Ergebnisse einer gespeicherten Prozedur aus einer gespeicherten Prozedur?
- 23. SqlAdapter.Fill (DataSet) füllt nur die erste Datentabelle, die von der gespeicherten Prozedur in Xamarin zurückgegeben wird
- 24. Wie Zeilen und eine Variable aus einer gespeicherten SQL Server-Prozedur zurückgegeben werden
- 25. Erster Rückgabewert von gespeicherten Prozedur in C#
- 26. SQL Server: Auto-inkrementierte ID in einer gespeicherten Prozedur abrufen?
- 27. Abrufen der Zeilenzelle mit Parametern in einer gespeicherten Prozedur
- 28. Abrufen der Ergebnisse aus einer gespeicherten Prozedur in Web Matrix
- 29. Verwendung von Cursor in einer Schleife einer gespeicherten Prozedur
- 30. Abrufen von gespeicherten Variablenwerten von anonymer Funktion
Folgen Sie für SQL2012 dem Rat in diesem Post: http://stackoverflow.com/a/14575114/569662 –
Wenn Microsoft DataTable in .NET Core veraltet hält, funktioniert diese Methode nicht mehr, wenn Sie zu Core wechseln. –