خوش آموز درخت تو گر بار دانش بگیرد، به زیر آوری چرخ نیلوفری را


استفاده از تابع ()TYPE_NAME در SQL Server

استفاده از تابع ()TYPE_NAME در SQL Server
با استفاده از تابع TYPE_NAME در SQL Server می تواند نام date type را بر اساس ID آن برگردانید. ای تابع هنگام کوئری نویسی و استفاده از View های سیستمی مانند sys.columns که فقط ID را برمی گردانند، کاربردی باشد. شما می توانید از تابع TYPE_NAME برای انواع دیتاتایپ های سیستمی و دیتاتایپ های user-defined استفاده کنید.

نرم افزار سامانه مودیان راهکار
ساده ترین استفاده از تابع مذکور را در مثال زیر مشاهده می کنید:



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 دیدگاه)

دیدگاه خود را ثبت کنید:

انتخاب تصویر ویرایش حذف
توجه! حداکثر حجم مجاز برای تصویر 500 کیلوبایت می باشد.


دسته بندی مطالب خوش آموز