Wie ermittelt man die Datentypen der Ergebnisse eines SQL?

8

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:

  • Es sind 25+ Tabellen / Ansichten beteiligt, so dass Funktionen auf Tabellenebene immer noch mühsam sind.
  • Alle Arbeiten werden derzeit in Microsoft SQL Server Management Studio ausgeführt.
Shawn 13.01.2009, 18:14
quelle

7 Antworten

5

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.

    
Dave Cluderay 13.01.2009, 18:54
quelle
8

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

    
Dennis C 04.12.2013 01:41
quelle
2

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:

%Vor%     
Brian Clapper 13.01.2009 18:20
quelle
2

Und für eine zusätzliche Alternative können Sie

verwenden %Vor%

BEARBEITEN: sp_help kann auch für jedes Objekt verwendet werden (d. h., es würde den Rückgabetyp der Eingabe- und Ausgabevariablen der gespeicherten Prozedur angeben)

    
cmsjr 13.01.2009 18:29
quelle
1

Wenn Sie C # verwenden, können Sie direkt über das Feld im DataRow-Objekt darauf zugreifen:

%Vor%     
Ricardo Villamil 13.01.2009 18:25
quelle
1

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 Ссылка :

%Vor%

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.

    
Jason Kleban 05.05.2015 15:33
quelle
0

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.

    
Bill Karwin 13.01.2009 18:30
quelle

Tags und Links