Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Разберете типа данни на колоните, върнати в набор от резултати в SQL Server

В 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 за повече информация и примери за тази функция.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server :Колони към редове

  2. Какво е SQL Server? (Определение, версии, издания)

  3. Използване на merge..output за получаване на съпоставяне между source.id и target.id

  4. Увеличението на идентичността скача в базата данни на SQL Server

  5. Да се ​​изтрие ли един запис от Entity Framework?