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

Използвайте TYPE_ID(), за да получите идентификатора на тип данни в SQL Server

В SQL Server можете да използвате TYPE_ID() функция за връщане на идентификатора на тип данни въз основа на неговото име. Това може да бъде полезно при запитване към системен изглед, който съхранява идентификатора на тип данни, но не и неговото име. Обикновено е по-лесно да запомните името. Не е толкова лесно да запомните ИД.

Можете да използвате TYPE_ID() за системни типове данни и потребителски дефинирани типове данни.

Пример 1 – Основна употреба

Ето основен пример, за да демонстрирате как работи.

SELECT TYPE_ID('varchar') AS Result;

Резултат:

+----------+
| Result   |
|----------|
| 167      |
+----------+

Този резултат ни казва, че varchar тип данни има идентификатор 167.

Пример 2 – Пример за база данни

Ето пример за използване на TYPE_ID() в WHERE клауза за филтриране на резултатите само до даден тип данни.

SELECT 
  o.name AS [Object Name], 
  c.name AS [Column Name],  
  c.user_type_id AS [Type ID],
  TYPE_NAME(c.user_type_id) AS [Type Name]
FROM sys.objects AS o   
JOIN sys.columns AS c  ON o.object_id = c.object_id
JOIN sys.types t ON c.user_type_id = t.user_type_id
WHERE c.user_type_id = TYPE_ID('varchar');

Резултат:

+---------------+---------------+-----------+-------------+
| Object Name   | Column Name   | Type ID   | Type Name   |
|---------------+---------------+-----------+-------------|
| Individual    | FirstName     | 167       | varchar     |
| Individual    | LastName      | 167       | varchar     |
| Occupation    | JobTitle      | 167       | varchar     |
| Event         | EventName     | 167       | varchar     |
| Scoreboard    | Player        | 167       | varchar     |
| Team          | TeamName      | 167       | varchar     |
| Client        | FirstName     | 167       | varchar     |
| Client        | LastName      | 167       | varchar     |
| Colors        | ColorName     | 167       | varchar     |
+---------------+---------------+-----------+-------------+

Ще забележите, че също използвам TYPE_NAME() в този пример, за да върне името въз основа на неговия идентификатор.

Пример 3 – Типове, дефинирани от потребителя

Можете също да използвате TYPE_ID() за дефинирани от потребителя типове. Ето пример, който включва дефиниран от потребителя псевдоним на тип в резултатите.

SELECT 
  o.name AS [Object Name], 
  c.name AS [Column Name],  
  c.user_type_id AS [Type ID],
  TYPE_NAME(c.user_type_id) AS [Type Name],
  CASE 
    WHEN t.is_user_defined = 1 THEN 'Yes'
    ELSE 'No' 
  END AS [User Defined?]
FROM sys.objects AS o   
JOIN sys.columns AS c  ON o.object_id = c.object_id
JOIN sys.types t ON c.user_type_id = t.user_type_id
WHERE c.user_type_id = TYPE_ID('varchar')
OR c.user_type_id = TYPE_ID('clientcode');

Резултат:

+---------------+---------------+-----------+-------------+-----------------+
| Object Name   | Column Name   | Type ID   | Type Name   | User Defined?   |
|---------------+---------------+-----------+-------------+-----------------|
| Individual    | FirstName     | 167       | varchar     | No              |
| Individual    | LastName      | 167       | varchar     | No              |
| Occupation    | JobTitle      | 167       | varchar     | No              |
| Event         | EventName     | 167       | varchar     | No              |
| Scoreboard    | Player        | 167       | varchar     | No              |
| Team          | TeamName      | 167       | varchar     | No              |
| Client        | ClientCode    | 257       | clientcode  | Yes             |
| Client        | FirstName     | 167       | varchar     | No              |
| Client        | LastName      | 167       | varchar     | No              |
| Colors        | ColorName     | 167       | varchar     | No              |
+---------------+---------------+-----------+-------------+-----------------+

Тук типът клиентски код е псевдоним на тип, дефиниран от потребителя, и е is_user_defined флагът е 1 . В този случай използвам CASE израз за връщане на Yes (и да върнете No ако е 0 ).

Пример 4 – Невалиден тип или недостатъчно разрешение

Ако предоставите невалидно име на тип или нямате достатъчно разрешение за препратка към типа, резултатът ще бъде NULL.

SELECT TYPE_ID('oops') AS Result;

Резултат:

+----------+
| Result   |
|----------|
| NULL     |
+----------+

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. tsql връща таблица от функция или процедура за съхранение

  2. Заобиколно решение за DATEDIFF() игнориране на SET DATEFIRST в SQL Server (пример за T-SQL)

  3. CRUD операции на SQL Server

  4. SQL, Помощна таблица с числа

  5. SQL Server Database Change Listener C#