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


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

استفاده از تابع ()OBJECT_ ID در SQL Server
با استفاده از تابع OBJECT_ID در SQL Server می توانید ID یک شیء را بر اساس نام آن بدست آورید. در بسیاری موارد شما فقط نام آن شیء را می دانید و از ID آن بی اطلاع هستید و اتفاقا به ID شیء در کوئری خود نیاز دارید، اینجاست که می توانید از این تابع استفاده کنید. در ادامه کار مثال هایی را از این تابع مشاهده خواهید کرد که با طرز کار و نحوه استفاده آن آشنا خواهید شد.

نرم افزار سامانه مودیان راهکار
لطفا به مثال ساده زیر دقت کنید:



SELECT OBJECT_ID('Artists') AS Result;

+-----------+
| Result |
|-----------|
| 885578193 |
+-----------+

در دیتابیس جاری، شیء ای با نام Albums که یک جدول است وجود دارد که ID آن 885578193 است. البته این شناسه را از ستون object_id در View سیستمی sys.objects هم قابل مشاهده است.

Check the sys.objects View
برای تایید مدعای فوق، مثال زیر مشاهده کنید که از View سیستمی sys.objects استفاده شده است:

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

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

دو ستون اول از خروجی کوئری فوق که از View ی sys.objects است، اولی به نام و دومی ID آن شیء مربوط می شود. در ستون سوم این مثال ، از OBJECT_ID برای برگرداندن شناسه شی بر اساس نام آن استفاده شده است. برای این کار ستون نام را به تابع OBJECT_ID پاس می دهیم. بدیهی است که این فقط یک مثال بود و استفاده از OBJECT_ID در این مورد غیرضروری است، زیرا sys.objects از قبل شناسه شی را برمی گرداند.

خب، لطفا به مثال زیر توجه کنید:

SELECT
OBJECT_ID('Artists') AS [1 Part Name],
OBJECT_ID('dbo.Artists') AS [2 Part Name],
OBJECT_ID('Music.dbo.Artists') AS [3 Part Name];

+---------------+---------------+---------------+
| 1 Part Name | 2 Part Name | 3 Part Name |
|---------------+---------------+---------------|
| 885578193 | 885578193 | 885578193 |
+---------------+---------------+---------------+

همانطور که مشاده می کنید، هم نام شیء مربوطه به تنهایی و هم همراه با schema و هم همراه با با نام دیتابیس و schema را می توان به تابع مذکور به عنوان پارامتر پاس داد و در خروجی ID آن را دریافت کرد.
حتی نام شیء و نام دیتابیس و schema را داخل براکت هم می توان گذاشت:

SELECT
OBJECT_ID('[Artists]') AS [1 Part Name],
OBJECT_ID('[dbo].[Artists]') AS [2 Part Name],
OBJECT_ID('[Music].[dbo].[Artists]') AS [3 Part Name];

+---------------+---------------+---------------+
| 1 Part Name | 2 Part Name | 3 Part Name |
|---------------+---------------+---------------|
| 885578193 | 885578193 | 885578193 |
+---------------+---------------+---------------+

اگر از وجود داشتن شیء مورد نظر در دیتابیس مربوطه مطمئن هستید ولی نتیجه NULL دریافت می کنید، به طرق فوق کوئری را وارد کنید تا نتیجه درست به شما داده شود.

بصورت پیشفرض SQL Server فرض را بر این می گذارد که شیء در دیتابیس فعلی قرار دارد. برای مشخص کردن شیء در یک دیتابیس دیگر باید بصورت سه قسمتی که در مثال فوق مشاهده کردید، نام شیء را وارد کنید.
در مثال های زیر، کد مشابه است با این تفاوت که یکبار برای دیتابیس Music و دومی برای دیتابیس WideWorldImportersDW اجرا می شود:

USE Music;
SELECT
OBJECT_ID('Artists') AS [1 Part Name],
OBJECT_ID('dbo.Artists') AS [2 Part Name],
OBJECT_ID('Music.dbo.Artists') AS [3 Part Name];

USE WideWorldImportersDW;
SELECT
OBJECT_ID('Artists') AS [1 Part Name],
OBJECT_ID('dbo.Artists') AS [2 Part Name],
OBJECT_ID('Music.dbo.Artists') AS [3 Part Name];

Changed database context to 'Music'.
+---------------+---------------+---------------+
| 1 Part Name | 2 Part Name | 3 Part Name |
|---------------+---------------+---------------|
| 885578193 | 885578193 | 885578193 |
+---------------+---------------+---------------+
(1 row affected)
Changed database context to 'WideWorldImportersDW'.
+---------------+---------------+---------------+
| 1 Part Name | 2 Part Name | 3 Part Name |
|---------------+---------------+---------------|
| NULL | NULL | 885578193 |
+---------------+---------------+---------------+
(1 row affected)

در Result اول ، هر سه ستون شناسه صحیح را برمی گردانند. این به این دلیل است که این شی در پایگاه داده music وجود دارد. ولی در Result دوم این طور نیست. دو ستون اول نتیجه Null را برمیگردانند که نشان از این دارد که چنین شیء ای در دیتابیس WideWorldImportersDW وجود ندارد. اما در قسمت سوم از آنجایی که نام شیء بصورت کامل وارد شده، نتیجه درست از دیتابیس Music برگردانده شده است.
تابع OBJECT_ID برای نوع شی آرگومان هم می پذیرد. این آرگومان بعد از نام شیء باید به تابع داده شود.

SELECT
OBJECT_ID('Artists', 'U') AS [Table];

+-----------+
| Table |
|-----------|
| 885578193 |
+-----------+

U در اینجا به معنی Table (user-defined) است. اگر بخواهیم نوع دیگری از شی را مشخص کنیم ، NULL دریافت خواهیم کرد.

SELECT
OBJECT_ID('Artists', 'U') AS [Table],
OBJECT_ID('Artists', 'V') AS [View],
OBJECT_ID('Artists', 'P') AS [Stored Procedure];

+-----------+--------+--------------------+
| Table | View | Stored Procedure |
|-----------+--------+--------------------|
| 885578193 | NULL | NULL |
+-----------+--------+--------------------+

در مثال زیر، نام یک View به تابع مذکور پاس داده شده است و فقط اسکریپتی که مربوط به View است نتیجه درست را برمی گرداند و بقیه Null هستند.

SELECT
OBJECT_ID('RockAlbums', 'U') AS [Table],
OBJECT_ID('RockAlbums', 'V') AS [View],
OBJECT_ID('RockAlbums', 'P') AS [Stored Procedure];

+---------+------------+--------------------+
| Table | View | Stored Procedure |
|---------+------------+--------------------|
| NULL | 1525580473 | NULL |
+---------+------------+--------------------+


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

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

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


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