В SQL Server можете да използвате TYPE_NAME()
функция за връщане на името на тип данни въз основа на неговия идентификатор. Това може да бъде полезно при запитване за системен изглед като sys.columns
който връща идентификатора на типа, но не и името му.
Можете да използвате TYPE_NAME()
за системни типове данни и потребителски дефинирани типове данни.
Пример 1 – Основна употреба
Ето основен пример, за да демонстрирате как работи.
ИЗБЕРЕТЕ TYPE_NAME(34) КАТО резултат;
Резултат:
+---------+| Резултат ||----------|| изображение |+---------+
Този резултат ни казва, че идентификаторът на типа 34 се използва за изображението тип.
Пример 2 – По-полезен пример
Ето по-полезен пример.
ИЗПОЛЗВАЙТЕ музика;ИЗБЕРЕТЕ o.name КАТО [Име на обект], c.name КАТО [Име на колона], TYPE_NAME(c.user_type_id) КАТО [Име на тип] ОТ sys.objects КАТО o ПРИСЪЕДИНЕТЕ sys.columns КАТО c ON o .object_id =c.object_idWHERE o.type_desc ='USER_TABLE';
Резултат:
+---------------+--------------+------------+ | Име на обект | Име на колона | Тип Име ||--------------+--------------+------------| | Художници | ArtistId | int || Художници | Име на изпълнител | nvarchar || Художници | ActiveFrom | дата || Художници | CountryId | int || Жанрове | GenreId | int || Жанрове | Жанр | nvarchar || Албуми | ID на албума | int || Албуми | Име на албум | nvarchar || Албуми | Дата на издаване | дата || Албуми | ArtistId | int || Албуми | GenreId | int || Държава | CountryId | int || Държава | Име на държава | nvarchar |+---------------+--------------+------------+предварително>Тази заявка връща потребителски таблици, заедно с техните колони и типа данни за всяка колона.
Ето как изглежда, ако премахна
TYPE_NAME()
:ИЗПОЛЗВАЙТЕ музика;ИЗБЕРЕТЕ o.name КАТО [Име на обект], c.name КАТО [Име на колона], c.user_type_id ОТ sys.objects КАТО o ПРИСЪЕДИНЕТЕ sys.columns КАТО c ON o.object_id =c.object_idWHERE o. type_desc ='USER_TABLE';Резултат:
+--------------+--------------+-------------- --+| Име на обект | Име на колона | user_type_id ||--------------+--------------+-------------- -|| Художници | ArtistId | 56 || Художници | Име на изпълнител | 231 || Художници | ActiveFrom | 40 || Художници | CountryId | 56 || Жанрове | GenreId | 56 || Жанрове | Жанр | 231 || Албуми | ID на албума | 56 || Албуми | Име на албум | 231 || Албуми | Дата на издаване | 40 || Албуми | ArtistId | 56 || Албуми | GenreId | 56 || Държава | CountryId | 56 || Държава | Име на държава | 231 |+--------------+--------------+-------------- -+Не е толкова лесно да прочетете идентификатора на типа.
Пример 3 – Типове, дефинирани от потребителя
Включени са дефинирани от потребителя типове. Ето пример, който включва дефиниран от потребителя псевдоним на тип в резултатите.
ИЗПОЛЗВАЙТЕ тест;ИЗБЕРЕТЕ o.name КАТО [Име на обект], c.name КАТО [Име на колона], TYPE_NAME(c.user_type_id) КАТО [Име на тип], СЛУЧАЙ, КОГАТО t.is_user_defined =1 THEN 'Yes' ELSE ' Не' КРАЙ КАТО [Потребителски дефиниран?]ОТ sys.objects КАТО o ПРИСЪЕДИНЕТЕ към sys.columns КАТО c ON o.object_id =c.object_idJOIN sys.types t ON c.user_type_id =t.user_type_idWHERE o.type_desc ='USER_TABLE' И o. .name ='Клиент';Резултат:
+---------------+--------------+------------+ -----------------+| Име на обект | Име на колона | Тип Име | Потребителски дефиниран? ||--------------+--------------+------------+-- ---------------|| Клиент | Клиентски код | клиентски код | Да || Клиент | Име | varchar | Не || Клиент | Фамилия | varchar | Не |+--------------+--------------+------------+- ----------------+Пример 4 – Използване на TYPE_NAME() в клауза WHERE
Можете да използвате
TYPE_NAME()
(и всяка друга системна функция) вWHERE
клауза (и навсякъде, където е разрешен израз).Тук променям предишния пример, така че да използвам
TYPE_NAME()
вWHERE
клауза.ИЗПОЛЗВАЙТЕ тест;ИЗБЕРЕТЕ o.name КАТО [Име на обект], c.name КАТО [Име на колона], TYPE_NAME(c.user_type_id) КАТО [Име на тип], СЛУЧАЙ, КОГАТО t.is_user_defined =1 THEN 'Yes' ELSE ' No' END AS [Defined?]FROM sys.objects AS o JOIN sys.columns AS c ON o.object_id =c.object_idJOIN sys.types t ON c.user_type_id =t.user_type_idWHERE TYPE_NAME(c.user'typeclient) =';Резултат:
+---------------+--------------+------------+ -----------------+| Име на обект | Име на колона | Тип Име | Потребителски дефиниран? ||--------------+--------------+------------+-- ---------------|| Клиент | Клиентски код | клиентски код | Да |+--------------+--------------+------------+- ----------------+Пример 5 – Невалиден тип ID или недостатъчно разрешение
Ако предоставите невалиден идентификатор на типа или нямате достатъчно разрешение за препратка към типа, резултатът ще бъде NULL.
ИЗБЕРЕТЕ TYPE_NAME(258) КАТО резултат;Резултат:
+---------+| Резултат ||----------|| NULL |+----------+Вземете идентификатора на типа
Ако вече знаете името на типа данни, но искате неговия идентификатор, можете да използвате
TYPE_ID()
за да върне идентификатора на тип данни въз основа на неговото име.