В SQL Server има няколко начина да получите метаданни на набора от резултати от заявка. Това включва типа данни на колоните, върнати от T-SQL заявка.
По-специално, sys.dm_exec_describe_first_result_set
Функцията за динамично управление на системата е добър избор за такава задача.
Пример
Ето пример, за да демонстрирате как да използвате sys.dm_exec_describe_first_result_set
за да получите информация за тип данни за всяка колона, върната от дадена 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);
Резултат:
+------------+------------------+--------------------+--------------+-------------+---------+ | 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 | +------------+------------------+--------------------+--------------+-------------+---------+
В този случай се връщат три реда, всеки от които представлява колона, която би била върната от заявката, която анализирам.
Може би сте забелязали, че една от колоните използва псевдоним на дефиниран от потребителя тип данни, наречен clientcode . Когато създавате псевдоним на дефиниран от потребителя тип данни, вие го базирате на съществуващ тип система. Това е отразено в горния резултат. Можем да видим този клиентски код е базиран на varchar(8) .
sys.dm_exec_describe_first_result_set
функцията връща много колони, така че не се колебайте да включите всички колони, за да видите дали има други, които може да ви бъдат полезни. Вижте също как sys.dm_exec_describe_first_result_set
Работи за по-подробно обяснение и повече примери.
Можете също да използвате sp_describe_first_result_set
системна съхранена процедура за връщане на същата информация (използва същия алгоритъм като sys.dm_exec_describe_first_result_set
).
Набори с резултати от запаметени процедури
Ако искате да получите типа данни на колоните, върнати от съхранена процедура, можете да използвате sys.dm_exec_describe_first_result_set_for_object
функция.
Тази функция използва същия алгоритъм като предишната, но разликата е, че тази приема идентификатора на съхранена процедура или тригер като свой първи аргумент (вместо действителния T-SQL пакет).
Следователно можем да го използваме по следния начин:
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);
Резултат:
+---------+------------------+--------------------+--------------+-------------+---------+ | 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 | +---------+------------------+--------------------+--------------+-------------+---------+
В този случай използвах OBJECT_ID()
функция за връщане на идентификатора на съхранената процедура, което ме спаси от необходимостта да знам действителния идентификатор.
Вижте Как работи sys.dm_exec_describe_first_result_set_for_object за повече информация и примери за тази функция.