sql >> Databáze >  >> RDS >> Sqlserver

Zjistěte typ dat vrácených sloupců v sadě výsledků na serveru SQL Server

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.


  1. Jak dezinfikovat raw SQL v Rails 4

  2. Nefunkční web a Twitter Feed

  3. Jak Coalesce() funguje v SQLite

  4. Doplnění chybějících termínů podle skupin