V SQL Server existuje několik způsobů, jak získat metadata sady výsledků z dotazu. To zahrnuje datový typ sloupců vrácených dotazem T-SQL.
Konkrétně sys.dm_exec_describe_first_result_set
funkce dynamického řízení systému je pro takový úkol dobrou volbou.
Příklad
Zde je příklad, který ukazuje, jak používat sys.dm_exec_describe_first_result_set
získat informace o typu dat o každém sloupci vráceném daným dotazem 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);
Výsledek:
+------------+------------------+--------------------+--------------+-------------+---------+ | 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 | +------------+------------------+--------------------+--------------+-------------+---------+
V tomto případě jsou vráceny tři řádky, z nichž každý představuje sloupec, který by byl vrácen dotazem, který analyzuji.
Možná jste si všimli, že jeden ze sloupců používá uživatelsky definovaný alias datového typu s názvem clientcode . Když vytvoříte uživatelem definovaný alias datového typu, založíte jej na existujícím typu systému. To se odráží ve výše uvedeném výsledku. Vidíme ten kód klienta je založen na varchar(8) .
Soubor sys.dm_exec_describe_first_result_set
Funkce vrací mnoho sloupců, takže neváhejte zahrnout všechny sloupce, abyste zjistili, zda existují nějaké další, které by se vám mohly hodit. Viz také Jak sys.dm_exec_describe_first_result_set
Funguje pro podrobnější vysvětlení a další příklady.
Můžete také použít sp_describe_first_result_set
systémová uložená procedura pro vrácení stejných informací (používá stejný algoritmus jako sys.dm_exec_describe_first_result_set
).
Uložené sady výsledků procedur
Pokud chcete získat datový typ sloupců vrácených uloženou procedurou, můžete použít sys.dm_exec_describe_first_result_set_for_object
funkce.
Tato funkce používá stejný algoritmus jako předchozí, ale rozdíl je v tom, že tato akceptuje ID uložené procedury nebo spouštěče jako svůj první argument (místo skutečné dávky T-SQL).
Proto jej můžeme použít takto:
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);
Výsledek:
+---------+------------------+--------------------+--------------+-------------+---------+ | 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 | +---------+------------------+--------------------+--------------+-------------+---------+
V tomto případě jsem použil OBJECT_ID()
funkce vrátit ID uložené procedury, což mě ušetřilo od nutnosti znát skutečné ID.
Další informace a příklady této funkce najdete v části Jak funguje sys.dm_exec_describe_first_result_set_for_object.