خوش آموز درخت تو گر بار دانش بگیرد، به زیر آوری چرخ نیلوفری را
استفاده از تابع ()TYPE_NAME در SQL Server
با استفاده از تابع TYPE_NAME در SQL Server می تواند نام date type را بر اساس ID آن برگردانید. ای تابع هنگام کوئری نویسی و استفاده از View های سیستمی مانند sys.columns که فقط ID را برمی گردانند، کاربردی باشد. شما می توانید از تابع TYPE_NAME برای انواع دیتاتایپ های سیستمی و دیتاتایپ های user-defined استفاده کنید.
ساده ترین استفاده از تابع مذکور را در مثال زیر مشاهده می کنید:
همانطور که در خروجی مشاهده کردید، ID، 34 برابر با دیتاتایپ Image می باشد. لطفا به مثال کاربردی زیر توجه کنید:
این کوئری جداول ایجاد شده توسط کاربر را به همراه ستون ها و دیتاتایپ برای هر ستون برمی گرداند. اگر تابع TYPE_NAME را از کوئری فوق حذف کنیم، نتیجه طور دیگری خواهد شد.
بر اساس ID خروجی نمایش داده می شود که متوجه شدن آن ساده نیست.
در خروجی کوئری زیر، user-defined type alias هم نمایش داده می شود:
هنگام استفاده از TYPE_NAME می توانید برای فیلتر خروجی از WHERE هم استفاده کنید. برای مثال در کوئری زیر، در Where، فقط user-defined type alias ها نمایش داده می شوند که رکورد اول در خروجی فوق است.
اگر به TYPE_NAME، یک ID نامعتبر پاس دهید، خروجی NULL خواهد شد.
ساده ترین استفاده از تابع مذکور را در مثال زیر مشاهده می کنید:
SELECT TYPE_NAME(34) AS Result;
+----------+
| Result |
|----------|
| image |
+----------+
همانطور که در خروجی مشاهده کردید، ID، 34 برابر با دیتاتایپ Image می باشد. لطفا به مثال کاربردی زیر توجه کنید:
USE Music;
SELECT
o.name AS [Object Name],
c.name AS [Column Name],
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
WHERE o.type_desc = 'USER_TABLE';
+---------------+---------------+-------------+
| Object Name | Column Name | Type Name |
|---------------+---------------+-------------|
| Artists | ArtistId | int |
| Artists | ArtistName | nvarchar |
| Artists | ActiveFrom | date |
| Artists | CountryId | int |
| Genres | GenreId | int |
| Genres | Genre | nvarchar |
| Albums | AlbumId | int |
| Albums | AlbumName | nvarchar |
| Albums | ReleaseDate | date |
| Albums | ArtistId | int |
| Albums | GenreId | int |
| Country | CountryId | int |
| Country | CountryName | nvarchar |
+---------------+---------------+-------------+
این کوئری جداول ایجاد شده توسط کاربر را به همراه ستون ها و دیتاتایپ برای هر ستون برمی گرداند. اگر تابع TYPE_NAME را از کوئری فوق حذف کنیم، نتیجه طور دیگری خواهد شد.
USE Music;
SELECT
o.name AS [Object Name],
c.name AS [Column Name],
c.user_type_id
FROM sys.objects AS o
JOIN sys.columns AS c ON o.object_id = c.object_id
WHERE o.type_desc = 'USER_TABLE';
+---------------+---------------+----------------+
| Object Name | Column Name | user_type_id |
|---------------+---------------+----------------|
| Artists | ArtistId | 56 |
| Artists | ArtistName | 231 |
| Artists | ActiveFrom | 40 |
| Artists | CountryId | 56 |
| Genres | GenreId | 56 |
| Genres | Genre | 231 |
| Albums | AlbumId | 56 |
| Albums | AlbumName | 231 |
| Albums | ReleaseDate | 40 |
| Albums | ArtistId | 56 |
| Albums | GenreId | 56 |
| Country | CountryId | 56 |
| Country | CountryName | 231 |
+---------------+---------------+----------------+
بر اساس ID خروجی نمایش داده می شود که متوجه شدن آن ساده نیست.
در خروجی کوئری زیر، user-defined type alias هم نمایش داده می شود:
USE Test;
SELECT
o.name AS [Object Name],
c.name AS [Column Name],
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 o.type_desc = 'USER_TABLE'
AND o.name = 'Client';
+---------------+---------------+-------------+-----------------+
| Object Name | Column Name | Type Name | User Defined? |
|---------------+---------------+-------------+-----------------|
| Client | ClientCode | clientcode | Yes |
| Client | FirstName | varchar | No |
| Client | LastName | varchar | No |
+---------------+---------------+-------------+-----------------+
هنگام استفاده از TYPE_NAME می توانید برای فیلتر خروجی از WHERE هم استفاده کنید. برای مثال در کوئری زیر، در Where، فقط user-defined type alias ها نمایش داده می شوند که رکورد اول در خروجی فوق است.
USE Test;
SELECT
o.name AS [Object Name],
c.name AS [Column Name],
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 TYPE_NAME(c.user_type_id) = 'clientcode';
+---------------+---------------+-------------+-----------------+
| Object Name | Column Name | Type Name | User Defined? |
|---------------+---------------+-------------+-----------------|
| Client | ClientCode | clientcode | Yes |
+---------------+---------------+-------------+-----------------+
اگر به TYPE_NAME، یک ID نامعتبر پاس دهید، خروجی NULL خواهد شد.
SELECT TYPE_NAME(258) AS Result;
+----------+
| Result |
|----------|
| NULL |
+----------+
نمایش دیدگاه ها (0 دیدگاه)
دیدگاه خود را ثبت کنید: