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


بدست آوردن نام شیء توسط Object Name

بدست آوردن نام شیء توسط Object Name
در SQL Server یک تابع built-in با نام OBJECT_NAME وجود دارد که نام یک آبجکت را بر اساس ID آن برمیگرداند. به عبارت دیگر از ID آن آبجکت را داشته باشید(به عنوان مثال ستون object_id) می توانید ID را تابع OBJECT_NAME پاس دهید و در خروجی نام شی را مشاهده کنید.

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



SELECT
name,
object_id,
OBJECT_NAME(object_id) AS [OBJECT_NAME(object_id)]
FROM sys.objects
WHERE name = 'Artists';

خروجی :

+---------+-------------+--------------------------+
| name | object_id | OBJECT_NAME(object_id) |
|---------+-------------+--------------------------|
| Artists | 885578193 | Artists |
+---------+-------------+--------------------------+

در خروجی اسکریپت فوق، همانطور که مشاهده می کنید، دو ستون اول، نام و شناسه شی و ستون سوم از تابع OBJECT_NAME برای برگرداندن نام از طریق ID استفاده می کند.
بدیهی است که این فقط یک مثال است و در این حالت استفاده از OBJECT_NAME غیرضروری بود چرا که View سیستمی sys.objects از قبل نام شی را برمی گرداند. مثال بعدی نشان می دهد که OBJECT_NAME چه فایده ای دارد.
در این مثال ، با کوئری از View سیستمی sys.foreign_keys، اطلاعات مربوط به یک کلید خارجی را برمی گردانیم. ابتدا اجازه دهید که همه ستون های موجود در این View را Select کنیم و ببینیم در خروجی این View چه فیلدهایی وجود دارد:

SELECT *
FROM sys.foreign_keys
WHERE name = 'FK_Artists_Country';

چیزی شبیه به خروجی زیر را دریافت خواهید کرد:

name                           | FK_Artists_Country
object_id | 1253579504
principal_id | NULL
schema_id | 1
parent_object_id | 885578193
type | F
type_desc | FOREIGN_KEY_CONSTRAINT
create_date | 2019-08-27 16:14:39.560
modify_date | 2019-08-28 03:28:07.040
is_ms_shipped | 0
is_published | 0
is_schema_published | 0
referenced_object_id | 1205579333
key_index_id | 1
is_disabled | 0
is_not_for_replication | 0
is_not_trusted | 0
delete_referential_action | 0
delete_referential_action_desc | NO_ACTION
update_referential_action | 0
update_referential_action_desc | NO_ACTION
is_system_named | 0

این view، نام کلید خارجی را برمی گرداند، اما نام آبجکت parent اصلی آن را بر نمی گرداند. همچنین نام شی ارجاع شده کلید خارجی را بر نمی گرداند. فقط شناسه آن اشیا را برمی گرداند (یعنی ، parent_object_id و referenced_object_id). پس اگر بخواهیم خروجی را فقط به این دو ستون مذکور محدود کنیم، کوئری زیر را باید استفاده کنیم:

USE Music;
SELECT
name,
parent_object_id,
referenced_object_id
FROM sys.foreign_keys
WHERE name = 'FK_Artists_Country';

+--------------------+--------------------+------------------------+
| name | parent_object_id | referenced_object_id |
|--------------------+--------------------+------------------------|
| FK_Artists_Country | 885578193 | 1205579333 |
+--------------------+--------------------+------------------------+

خوشبختانه ، ما می توانیم دو ستون آخر را برای بازیابی نام شی به OBJECT_NAME پاس کنیم. برای نام اشیاء مربوطه، به این طریق عمل می کنیم:

SELECT
name AS [Foreign Key],
OBJECT_NAME(parent_object_id) AS [Parent Object Name],
OBJECT_NAME(referenced_object_id) AS [Referenced Object Name]
FROM sys.foreign_keys
WHERE name = 'FK_Artists_Country';

+--------------------+----------------------+--------------------------+
| Foreign Key | Parent Object Name | Referenced Object Name |
|--------------------+----------------------+--------------------------|
| FK_Artists_Country | Artists | Country |
+--------------------+----------------------+--------------------------+

برای دو ستون آخر ، مقادیر مربوطه را به تابع OBJECT_NAME پاس می دهیم تا نام هر یک از اشیاء parent اصلی را برگرداند.

Using OBJECT_NAME() in a WHERE Clause


در مثال زیر از تابع OBJECT_NAME همراه با WHERE استفاده شده است:

SELECT
name,
object_id,
type_desc
FROM sys.objects
WHERE name = OBJECT_NAME(1253579504);

+--------------------+-------------+------------------------+
| name | object_id | type_desc |
|--------------------+-------------+------------------------|
| FK_Artists_Country | 1253579504 | FOREIGN_KEY_CONSTRAINT |
+--------------------+-------------+------------------------+

به طور پیش فرض ، SQL Server فرض را بر این می گذارد که ID شی در همین دیتابیس فعلی است. کوئری ای که به یک ID در دیتابیس دیگر ارجاع دارد، نتایج NULL یا نادرست را برمی گرداند. در صورت نیاز به یافتن نام شی از دیتابیس دیگر، ID آن دیتابیس را به عنوان پارامتر دوم به تابع OBJECT_NAME پاس دهید.



نمایش دیدگاه ها (0 دیدگاه)

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

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


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