Wir haben eine SQL-Abfrage, die eine große Anzahl von Feldern aus vielen Tabellen / Sichten aus einer Datenbank abruft. Wir müssen eine Spezifikation für die Integration mit einem Drittanbieter zusammenstellen, was ist der schnellste Weg, um die Datentypen der Ergebnismenge zu kompilieren?
Klarstellungen:
Sie können die Abfrage mit SET FMTONLY ON ausführen, aber das hilft Ihnen möglicherweise nicht, die zurückgegebenen Datentypen einfach zu ermitteln, da Sie nur in Management Studio arbeiten. Wenn ich es wäre, würde ich eine Ansicht vorübergehend mit dem gleichen Körper erstellen wie die gespeicherte Prozedur (Sie müssen vielleicht Variablen für irgendwelche Parameter deklarieren). Sie können dann die von der Ansicht zurückgegebenen Spalten mit den bereits besprochenen INFORMATION_SCHEMA-Abfragen betrachten.
Sie können einige schnelle SQL-Anweisungen verwenden, um den Ergebnistyp der Spalte anzuzeigen, indem Sie die temporäre Tabelle verwenden.
Temp-Tabellen sind etwas besser als eine Ansicht, da sie verbindungslokaler Geltungsbereich sind und nach dem Trennen der Verbindung gelöscht werden.
Alles, was Sie brauchen, ist ein paar Keyword wie folgt zu injizieren
%Vor%oder;
%Vor%Hinweis: inspiriert von Schema der Ergebnismenge in SQL Server Management Studio anzeigen
Wenn Sie SQL Server verwenden, sind Metadaten aus verschiedenen Tabellen in der Tabelle information_schema
verfügbar. Um beispielsweise Spaltenmetadaten für die Tabelle Foo abzurufen, geben Sie diese Abfrage ein:
Wenn Sie C # verwenden, können Sie direkt über das Feld im DataRow-Objekt darauf zugreifen:
%Vor% Hier ist einer, wenn Sie nur SELECT ... INTO #Temp
(denken Sie daran, dass #Temp
im schlimmsten Fall auf die Sitzung beschränkt ist) mit einigen gestohlenen aus Ссылка :
Eine motiviertere Person könnte eine intelligentere Zuordnung der Typen zu .Net-Entsprechungen automatisch vornehmen, aber das ist nicht so schlimm und hält das Snippet kurz.
Das manuelle Konvertieren dieser Typen war ein Ärgernis, dass sich die Erweiterung des Skripts lohnte. Nicht sicher, ob meine Conversions korrekt sind.
Beachten Sie, dass die Metadaten der Ergebnismenge sich von den Tabellenmetadaten unterscheiden, da SQL-Abfragen Ausdrücke enthalten können, deren Datentypen nicht mit denen in den abgefragten Tabellen übereinstimmen.
Viele SQL-Query-Interfaces bieten Ihnen eine Funktion zum Abrufen von Informationen zu den Resultset-Metadaten (Datentypen usw.).
Welche API-Funktionen Sie verwenden müssen, hängt davon ab, welche Sprache und welche Abfrageoberfläche Sie verwenden. Du hast das nicht gesagt.
Wenn Sie beispielsweise ODBC verwenden, lautet die SQLDescribeCol()
Funktion kann Ihnen Informationen über die Metadaten des Resultsets geben.
Tags und Links sql-server ssms