In SQL Server gibt es mehrere Möglichkeiten, Metadaten der Ergebnismenge einer Abfrage abzurufen. Dazu gehört der Datentyp der Spalten, die von einer T-SQL-Abfrage zurückgegeben werden.
Insbesondere das sys.dm_exec_describe_first_result_set
System Dynamic Management-Funktion ist eine gute Wahl für eine solche Aufgabe.
Beispiel
Hier ist ein Beispiel zur Veranschaulichung der Verwendung von sys.dm_exec_describe_first_result_set
zum Abrufen von Datentypinformationen zu jeder Spalte, die von einer bestimmten T-SQL-Abfrage zurückgegeben wird.
SELECT
name,
user_type_name,
system_type_name,
max_length,
[precision],
scale
FROM sys.dm_exec_describe_first_result_set(
'select * from Clients',
null,
0);
Ergebnis:
+------------+------------------+--------------------+--------------+-------------+---------+ | name | user_type_name | system_type_name | max_length | precision | scale | |------------+------------------+--------------------+--------------+-------------+---------| | ClientCode | clientcode | varchar(8) | 8 | 0 | 0 | | FirstName | NULL | varchar(60) | 60 | 0 | 0 | | LastName | NULL | varchar(60) | 60 | 0 | 0 | +------------+------------------+--------------------+--------------+-------------+---------+
In diesem Fall werden drei Zeilen zurückgegeben, von denen jede eine Spalte darstellt, die von der von mir analysierten Abfrage zurückgegeben würde.
Sie haben vielleicht bemerkt, dass eine der Spalten einen benutzerdefinierten Datentyp-Alias namens clientcode verwendet . Wenn Sie einen benutzerdefinierten Datentypalias erstellen, basieren Sie ihn auf einem vorhandenen Systemtyp. Dies spiegelt sich im obigen Ergebnis wieder. Wir können diesen Clientcode sehen basiert auf varchar(8) .
Das sys.dm_exec_describe_first_result_set
Die Funktion gibt viele Spalten zurück, Sie können also gerne alle Spalten einbeziehen, um zu sehen, ob es andere gibt, die Sie nützlich finden könnten. Siehe auch Wie sys.dm_exec_describe_first_result_set
Werke für eine ausführlichere Erklärung und weitere Beispiele.
Sie können auch das sp_describe_first_result_set
verwenden gespeicherte Systemprozedur, um dieselben Informationen zurückzugeben (sie verwendet denselben Algorithmus wie sys.dm_exec_describe_first_result_set
).
Ergebnissätze gespeicherter Prozeduren
Wenn Sie den Datentyp der Spalten abrufen möchten, die von einer gespeicherten Prozedur zurückgegeben werden, können Sie sys.dm_exec_describe_first_result_set_for_object
verwenden Funktion.
Diese Funktion verwendet denselben Algorithmus wie die vorherige, aber der Unterschied besteht darin, dass diese die ID einer gespeicherten Prozedur oder eines Triggers als erstes Argument akzeptiert (anstelle des eigentlichen T-SQL-Stapels).
Daher können wir es wie folgt verwenden:
SELECT
name,
user_type_name,
system_type_name,
max_length,
[precision],
scale
FROM sys.dm_exec_describe_first_result_set_for_object(
OBJECT_ID('sp_BadDogs'),
0);
Ergebnis:
+---------+------------------+--------------------+--------------+-------------+---------+ | name | user_type_name | system_type_name | max_length | precision | scale | |---------+------------------+--------------------+--------------+-------------+---------| | DogId | NULL | int | 4 | 10 | 0 | | DogName | NULL | nvarchar(255) | 510 | 0 | 0 | | GoodDog | NULL | bit | 1 | 1 | 0 | +---------+------------------+--------------------+--------------+-------------+---------+
In diesem Fall habe ich die OBJECT_ID()
verwendet Funktion, um die ID der gespeicherten Prozedur zurückzugeben, was mir die Kenntnis der tatsächlichen ID ersparte.
Weitere Informationen und Beispiele für diese Funktion finden Sie unter Funktionsweise von sys.dm_exec_describe_first_result_set_for_object.