Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Znajdź typ danych kolumn zwróconych w zestawie wyników w SQL Server

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Uzyskanie minimum dwóch wartości w SQL

  2. Co to jest domyślne ograniczenie w programie SQL Server — samouczek dotyczący programu SQL Server / TSQL — część 90

  3. Eksplorowanie interfejsu graficznego magazynu zapytań SQL Server 2016

  4. Wypisz ciąg znaków w SQL Server, aby można go było bezpiecznie używać w wyrażeniu LIKE

  5. Powody, dla których nie ma indeksu klastrowego w SQL Server 2005