W SQL Server istnieje kilka sposobów uzyskania metadanych zestawu wyników z zapytania. Obejmuje to typ danych kolumn zwróconych przez zapytanie T-SQL.
W szczególności sys.dm_exec_describe_first_result_set
funkcja dynamicznego zarządzania systemem jest dobrym wyborem do takiego zadania.
Przykład
Oto przykład pokazujący, jak używać sys.dm_exec_describe_first_result_set
aby uzyskać informacje o typie danych o każdej kolumnie zwróconej przez dane zapytanie T-SQL.
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);
Wynik:
+------------+------------------+--------------------+--------------+-------------+---------+ | 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 | +------------+------------------+--------------------+--------------+-------------+---------+
W tym przypadku zwracane są trzy wiersze, z których każdy reprezentuje kolumnę, która zostałaby zwrócona przez analizowane przeze mnie zapytanie.
Być może zauważyłeś, że jedna z kolumn używa zdefiniowanego przez użytkownika aliasu typu danych o nazwie kod klienta . Podczas tworzenia aliasu typu danych zdefiniowanego przez użytkownika opierasz go na istniejącym typie systemu. Znajduje to odzwierciedlenie w powyższym wyniku. Widzimy, że kod klienta jest oparty na varchar(8) .
sys.dm_exec_describe_first_result_set
funkcja zwraca wiele kolumn, więc możesz uwzględnić wszystkie kolumny, aby zobaczyć, czy są jakieś inne, które mogą Ci się przydać. Zobacz także Jak sys.dm_exec_describe_first_result_set
Działa na bardziej szczegółowe wyjaśnienie i więcej przykładów.
Możesz także użyć sp_describe_first_result_set
systemowa procedura składowana zwracająca te same informacje (używa tego samego algorytmu co sys.dm_exec_describe_first_result_set
).
Zestawy wyników procedur zapisanych
Jeśli chcesz uzyskać typ danych kolumn zwracanych przez procedurę składowaną, możesz użyć sys.dm_exec_describe_first_result_set_for_object
funkcja.
Ta funkcja używa tego samego algorytmu, co poprzednia, ale różnica polega na tym, że ta akceptuje identyfikator procedury składowanej lub wyzwalacza jako pierwszy argument (zamiast rzeczywistej partii T-SQL).
Dlatego możemy go używać w ten sposób:
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);
Wynik:
+---------+------------------+--------------------+--------------+-------------+---------+ | 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 | +---------+------------------+--------------------+--------------+-------------+---------+
W tym przypadku użyłem OBJECT_ID()
funkcja zwracająca identyfikator procedury składowanej, dzięki czemu nie musiałem znać rzeczywistego identyfikatora.
Zobacz Jak działa sys.dm_exec_describe_first_result_set_for_object, aby uzyskać więcej informacji i przykładów tej funkcji.