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


یافتن نام شیء در دیتابیس دیگر با استفاده از تابع ()OBJECT_ NAME

یافتن نام شیء در دیتابیس دیگر با استفاده از تابع ()OBJECT_ NAME
در SQL Server برای بدست اوردن نام یک شی از یک دیتابیس دیگر می توانید از تابع OBJECT_NAME استفاده کنید. تابع OBJECT_NAM پارامتر ID یک شی را گرفته و نام آن را بر میگرداند و البته این تابع، پارامتر دیگری با نام database_id را هم می پذیرد که در این صورت نام شی را از آن دیتابیس برمیگرداند. بصورت پیشفرض تابع OBJECT_NAM، با این فرض این شی در همین دیتابیس جاری است، عمل می کند و اگر شی به دیتابیس دیگری تعلق دارد، باید ID آن دیتابیس را به عنوان پارامتر دوم برای OBJECT_NAM قید کنید.

سیستم یکپارچۀ سازمانی راهکار



Local Query (from Current Database)

در مطلب پیشین، در خصوص یافتن نام شی از دیتابیس جاری به طور کامل صحبت شد که در این خصوص می توانید به این لینک مراجعه کنید.

Cross-Database Query with WRONG RESULTS!

در مثال زیر، یک کوئری cross-database را مشاهده می کنید خروجی اشتباه بر میگرداند:

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

Changed database context to 'WideWorldImportersDW'.
+--------------------+----------------------+-----------------------------+
| Foreign Key | Parent Object Name | Referenced Object Name |
|--------------------+----------------------+-----------------------------|
| FK_Artists_Country | CityKey | PK_Dimension_Payment_Method |
+--------------------+----------------------+-----------------------------+
(1 row affected)

همانطور که مشاهده می کنید، در Music به دیتابیس music سوئیچ شده که همین امر باعث می شود که تا کلید خارجی صحیح پیدا شود ولی برای جلوگیری از مشکل کافی نیست. دیتابیس WideWorldImportersDW دارای اشیایی با همان object_id است که در پایگاه داده music وجود دارد. تنها مشکل این است که آنها اشیا کاملاً مختلف و با نام های مختلف هستند و از این رو خروجی صحیح نخواهد بود. البته اگر این اشیاء هم در دیتابیس Music وجود نداشتند، مقدار NULL را در خروجی دریافت می کردید که در این صورت تشخیص اشتباه برای شما ساده تر می شد ولی چون در کوئری فوق خروجی برگردانده شده، این شما را احتمالا به اشتباه خواهد انداخت و شاید متوجه اشتباه بودن مقادیر در خروجی نشوید.

Cross-Database Query with CORRECT Results

برای دریافت خروجی درست، در کوئری هایی مانند کوئری فوق که Cross-Database بود، باید ID دیتابیس را هم به تابع Object_Name پاس دهید.

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

Changed database context to 'WideWorldImportersDW'.
+--------------------+----------------------+--------------------------+
| Foreign Key | Parent Object Name | Referenced Object Name |
|--------------------+----------------------+--------------------------|
| FK_Artists_Country | Artists | Country |
+--------------------+----------------------+--------------------------+
(1 row affected)

همانطور که در کوئری مشاهده می کنید، id مربوط به دیتابیس به عنوان پارامتر دوم معرفی شد و بدین ترتیب مقادیر نام اشیاء، از دیتابیس درست انتخاب شد.

How to Get the Database ID

شاید ID دیتابیس مورد نظرتان را ندانید ولی قطعا نام آن را می دانید. پس به جای ID، می توانید از نام دیتابیس مورد نظرتان در کوئری استفاده کنید. در این خصوص می توانید از تابع DB_ID استفاده کنید. پس اسکریپت فوق را بصورت زیر می توانید اصلاح کنید.


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

Changed database context to 'WideWorldImportersDW'.
+--------------------+----------------------+--------------------------+
| Foreign Key | Parent Object Name | Referenced Object Name |
|--------------------+----------------------+--------------------------|
| FK_Artists_Country | Artists | Country |
+--------------------+----------------------+--------------------------+
(1 row affected)


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

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

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


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