DB_ID در SQL Server؛ آموزش کامل و مثال عملی

آموزش تابع DB_ID در SQL Server؛ مثال‌ها و نکات حرفه‌ای

توسط admin | گروه SQL Server | 1405/04/29

نظرات 0

آموزش جامع تابع DB_ID در SQL Server؛ از Syntax تا بهینه‌سازی

مقدمه و جایگاه تابع در SQL Server

تابع DB_ID یکی از ابزارهای مهم متادیتا در Microsoft SQL Server است و برای تبدیل نام پایگاه داده به شناسه داخلی آن در نمونه SQL Server استفاده می‌شود. متادیتا داده‌ای درباره ساختار و وضعیت داده‌هاست؛ بنابراین پاسخ این تابع به محتوای رکوردهای تجاری وابسته نیست، بلکه به Context پایگاه داده، کاتالوگ سیستم، نوع ورودی و سطح دسترسی کاربر ارتباط دارد.

در پروژه‌های واقعی، DB_ID در فیلتر DMVها، ساخت اسکریپت‌های مدیریتی، کنترل Context و اتصال نام منطقی پایگاه داده به شناسه داخلی به کار می‌رود. استفاده حرفه‌ای فقط نوشتن یک SELECT کوتاه نیست؛ باید تفاوت مقدار معتبر، صفر و NULL، اثر Metadata Visibility، نام‌گذاری Schema-qualified و هزینه اجرای تکراری تابع را نیز شناخت.

این راهنما از مثال پایه آغاز می‌کند و تا سناریوهای ممیزی، گزارش‌گیری و بهینه‌سازی پیش می‌رود. برای مشاهده نقشه کامل این خانواده، راهنمای جامع توابع متادیتا در SQL Server را نیز مطالعه کنید.

تعریف، Syntax و قرارداد خروجی DB_ID

DB_ID به زبان ساده تبدیل نام پایگاه داده به شناسه داخلی آن در نمونه SQL Server را انجام می‌دهد. موتور SQL Server ورودی را در Context جاری تفسیر می‌کند و نتیجه‌ای با نوع int برمی‌گرداند. اگر ورودی به شیء معتبر اشاره نکند، property پشتیبانی نشود یا کاربر اجازه دیدن متادیتا را نداشته باشد، نتیجه می‌تواند NULL باشد.

نحو استاندارد

SELECT DB_ID ( [ database_name ] ) AS Result;
    

پارامترها

پارامتر اختیاری database_name از نوع sysname است؛ اگر حذف شود شناسه پایگاه داده جاری بازگردانده می‌شود.

نوع خروجی و معنای NULL

نوع اعلام‌شده خروجی int است. برنامه مصرف‌کننده باید NULL را یک حالت مستقل بداند و پیش از تبدیل نوع یا تصمیم‌گیری، علت آن را بررسی کند. خروجی برای نام ناموجود یا متادیتای خارج از سطح دسترسی می‌تواند NULL باشد و شناسه‌ها را نباید میان سرورها ثابت فرض کرد.

موضوعتوضیح فنی
کاربرد اصلیتبدیل نام پایگاه داده به شناسه داخلی آن در نمونه SQL Server
نوع خروجیint
Contextپایگاه داده یا نشست جاری، مطابق قرارداد تابع
حالت NULLورودی نامعتبر، نبود شیء یا نبود مجوز مشاهده متادیتا
کاربرد سازمانیفیلتر DMVها، ساخت اسکریپت‌های مدیریتی، کنترل Context و اتصال نام منطقی پایگاه داده به شناسه داخلی
اصل مهم: خروجی تابع DB_ID را داده امنیتی قابل اعتماد فرض نکنید مگر اینکه مستندات همان property و مجوزهای Context این برداشت را تأیید کنند.

مثال‌های عملی مستقل و قابل اجرا

مثال 1: شناسه پایگاه داده جاری

در این سناریو می‌خواهیم شناسه پایگاه داده جاری را با تابع DB_ID پیاده‌سازی کنیم. Query زیر مستقل طراحی شده است؛ اگر به جدول پروژه اشاره دارد، نام Schema و شیء را با ساختار واقعی محیط خود هماهنگ کنید و پیش از اجرای عملیاتی سطح دسترسی را کنترل نمایید.

SELECT DB_ID() AS CurrentDatabaseId;
    
فیلد یا ستونخروجی نمونه
CurrentDatabaseId5

نکته کاربردی این مثال: عدد واقعی در هر نمونه متفاوت است. نتیجه نمایش‌داده‌شده نمونه است و شناسه‌ها، نام‌ها یا اندازه‌ها ممکن است در سرور شما متفاوت باشند؛ معیار صحت، منطق Query و متادیتای واقعی محیط است.

مثال 2: تبدیل نام مشخص به شناسه

در این سناریو می‌خواهیم تبدیل نام مشخص به شناسه را با تابع DB_ID پیاده‌سازی کنیم. Query زیر مستقل طراحی شده است؛ اگر به جدول پروژه اشاره دارد، نام Schema و شیء را با ساختار واقعی محیط خود هماهنگ کنید و پیش از اجرای عملیاتی سطح دسترسی را کنترل نمایید.

SELECT DB_ID(N'master') AS MasterDatabaseId;
    
فیلد یا ستونخروجی نمونه
MasterDatabaseId1

نکته کاربردی این مثال: نام‌های سیستمی در نصب استاندارد شناسه شناخته‌شده دارند. نتیجه نمایش‌داده‌شده نمونه است و شناسه‌ها، نام‌ها یا اندازه‌ها ممکن است در سرور شما متفاوت باشند؛ معیار صحت، منطق Query و متادیتای واقعی محیط است.

مثال 3: ساخت داده نمونه و جست‌وجوی شناسه

در این سناریو می‌خواهیم ساخت داده نمونه و جست‌وجوی شناسه را با تابع DB_ID پیاده‌سازی کنیم. Query زیر مستقل طراحی شده است؛ اگر به جدول پروژه اشاره دارد، نام Schema و شیء را با ساختار واقعی محیط خود هماهنگ کنید و پیش از اجرای عملیاتی سطح دسترسی را کنترل نمایید.

DECLARE @Dbs TABLE(DatabaseName sysname);
    INSERT INTO @Dbs VALUES (N'master'),(N'tempdb');
    SELECT DatabaseName, DB_ID(DatabaseName) AS DatabaseId FROM @Dbs;
    
فیلد یا ستونخروجی نمونه
master1
tempdb2

نکته کاربردی این مثال: تابع می‌تواند برای هر ردیف نام را حل کند. نتیجه نمایش‌داده‌شده نمونه است و شناسه‌ها، نام‌ها یا اندازه‌ها ممکن است در سرور شما متفاوت باشند؛ معیار صحت، منطق Query و متادیتای واقعی محیط است.

مثال 4: استفاده در شرط DMV

در این سناریو می‌خواهیم استفاده در شرط DMV را با تابع DB_ID پیاده‌سازی کنیم. Query زیر مستقل طراحی شده است؛ اگر به جدول پروژه اشاره دارد، نام Schema و شیء را با ساختار واقعی محیط خود هماهنگ کنید و پیش از اجرای عملیاتی سطح دسترسی را کنترل نمایید.

SELECT name, state_desc
    FROM sys.databases
    WHERE database_id = DB_ID();
    
فیلد یا ستونخروجی نمونه
a00bONLINE

نکته کاربردی این مثال: این الگو وضعیت پایگاه جاری را بدون Hard-code کردن نام می‌خواند. نتیجه نمایش‌داده‌شده نمونه است و شناسه‌ها، نام‌ها یا اندازه‌ها ممکن است در سرور شما متفاوت باشند؛ معیار صحت، منطق Query و متادیتای واقعی محیط است.

مثال 5: ترکیب DB_ID و DB_NAME

در این سناریو می‌خواهیم ترکیب DB_ID و DB_NAME را با تابع DB_ID پیاده‌سازی کنیم. Query زیر مستقل طراحی شده است؛ اگر به جدول پروژه اشاره دارد، نام Schema و شیء را با ساختار واقعی محیط خود هماهنگ کنید و پیش از اجرای عملیاتی سطح دسترسی را کنترل نمایید.

SELECT DB_NAME(DB_ID()) AS RoundTripDatabaseName;
    
فیلد یا ستونخروجی نمونه
RoundTripDatabaseNamea00b

نکته کاربردی این مثال: تبدیل رفت‌وبرگشتی برای اعتبارسنجی Context مفید است. نتیجه نمایش‌داده‌شده نمونه است و شناسه‌ها، نام‌ها یا اندازه‌ها ممکن است در سرور شما متفاوت باشند؛ معیار صحت، منطق Query و متادیتای واقعی محیط است.

مثال 6: رفتار نام ناموجود

در این سناریو می‌خواهیم رفتار نام ناموجود را با تابع DB_ID پیاده‌سازی کنیم. Query زیر مستقل طراحی شده است؛ اگر به جدول پروژه اشاره دارد، نام Schema و شیء را با ساختار واقعی محیط خود هماهنگ کنید و پیش از اجرای عملیاتی سطح دسترسی را کنترل نمایید.

SELECT COALESCE(CONVERT(nvarchar(20), DB_ID(N'NoSuchDatabase')), N'NULL') AS Result;
    
فیلد یا ستونخروجی نمونه
ResultNULL

نکته کاربردی این مثال: NULL را صریح مدیریت کنید و آن را با صفر اشتباه نگیرید. نتیجه نمایش‌داده‌شده نمونه است و شناسه‌ها، نام‌ها یا اندازه‌ها ممکن است در سرور شما متفاوت باشند؛ معیار صحت، منطق Query و متادیتای واقعی محیط است.

مثال 7: نام دارای کاراکتر خاص

در این سناریو می‌خواهیم نام دارای کاراکتر خاص را با تابع DB_ID پیاده‌سازی کنیم. Query زیر مستقل طراحی شده است؛ اگر به جدول پروژه اشاره دارد، نام Schema و شیء را با ساختار واقعی محیط خود هماهنگ کنید و پیش از اجرای عملیاتی سطح دسترسی را کنترل نمایید.

DECLARE @DatabaseName sysname = DB_NAME();
    SELECT DB_ID(@DatabaseName) AS SafeId;
    
فیلد یا ستونخروجی نمونه
SafeId5

نکته کاربردی این مثال: پارامتر مقدار است و نیازی به QUOTENAME ندارد؛ QUOTENAME برای SQL پویا است. نتیجه نمایش‌داده‌شده نمونه است و شناسه‌ها، نام‌ها یا اندازه‌ها ممکن است در سرور شما متفاوت باشند؛ معیار صحت، منطق Query و متادیتای واقعی محیط است.

مثال 8: گزارش فضای فایل‌های پایگاه جاری

در این سناریو می‌خواهیم گزارش فضای فایل‌های پایگاه جاری را با تابع DB_ID پیاده‌سازی کنیم. Query زیر مستقل طراحی شده است؛ اگر به جدول پروژه اشاره دارد، نام Schema و شیء را با ساختار واقعی محیط خود هماهنگ کنید و پیش از اجرای عملیاتی سطح دسترسی را کنترل نمایید.

SELECT DB_NAME(database_id) AS DatabaseName,
           type_desc, size * 8.0 / 1024 AS SizeMB
    FROM sys.master_files
    WHERE database_id = DB_ID();
    
فیلد یا ستونخروجی نمونه
a00bROWS512.000000

نکته کاربردی این مثال: دسترسی به کاتالوگ سروری تابع مجوزهای حساب است. نتیجه نمایش‌داده‌شده نمونه است و شناسه‌ها، نام‌ها یا اندازه‌ها ممکن است در سرور شما متفاوت باشند؛ معیار صحت، منطق Query و متادیتای واقعی محیط است.

مثال 9: روش اشتباه و کنترل صحیح NULL

در این سناریو می‌خواهیم روش اشتباه و کنترل صحیح NULL را با تابع DB_ID پیاده‌سازی کنیم. Query زیر مستقل طراحی شده است؛ اگر به جدول پروژه اشاره دارد، نام Schema و شیء را با ساختار واقعی محیط خود هماهنگ کنید و پیش از اجرای عملیاتی سطح دسترسی را کنترل نمایید.

DECLARE @Id int = DB_ID(N'NoSuchDatabase');
    IF @Id IS NULL
        SELECT N'پایگاه داده یافت نشد یا قابل مشاهده نیست' AS Message;
    
فیلد یا ستونخروجی نمونه
Messageپایگاه داده یافت نشد یا قابل مشاهده نیست

نکته کاربردی این مثال: مقایسه با صفر معتبر نیست؛ از IS NULL استفاده کنید. نتیجه نمایش‌داده‌شده نمونه است و شناسه‌ها، نام‌ها یا اندازه‌ها ممکن است در سرور شما متفاوت باشند؛ معیار صحت، منطق Query و متادیتای واقعی محیط است.

مثال 10: محاسبه یک‌باره برای Query مدیریتی

در این سناریو می‌خواهیم محاسبه یک‌باره برای Query مدیریتی را با تابع DB_ID پیاده‌سازی کنیم. Query زیر مستقل طراحی شده است؛ اگر به جدول پروژه اشاره دارد، نام Schema و شیء را با ساختار واقعی محیط خود هماهنگ کنید و پیش از اجرای عملیاتی سطح دسترسی را کنترل نمایید.

DECLARE @DbId int = DB_ID();
    SELECT file_id, name, size
    FROM sys.database_files
    WHERE @DbId IS NOT NULL;
    
فیلد یا ستونخروجی نمونه
file_id1
namea00b
size65536

نکته کاربردی این مثال: در پرس‌وجوهای طولانی شناسه را یک‌بار در متغیر قرار دهید. نتیجه نمایش‌داده‌شده نمونه است و شناسه‌ها، نام‌ها یا اندازه‌ها ممکن است در سرور شما متفاوت باشند؛ معیار صحت، منطق Query و متادیتای واقعی محیط است.

خطاهای رایج و روش عیب‌یابی

نخستین خطای رایج در DB_ID اجرای Query در پایگاه داده نادرست است. قبل از تحلیل نتیجه، DB_NAME()، نام Schema و شناسه ورودی را ثبت کنید. اگر خروجی NULL است، جداگانه وجود شیء، صحت نام، نوع شیء و مجوز VIEW DEFINITION یا مجوز مرتبط را بررسی کنید.

خطای دوم، چسباندن خروجی تابع به SQL پویا بدون اعتبارسنجی است. نامی که قرار است به‌عنوان Identifier استفاده شود باید از منبع مورد اعتماد بیاید و با QUOTENAME محصور شود؛ مقدارهای تجاری نیز باید با sp_executesql پارامتری شوند. خروجی برای نام ناموجود یا متادیتای خارج از سطح دسترسی می‌تواند NULL باشد و شناسه‌ها را نباید میان سرورها ثابت فرض کرد.

  • Context جاری را با SELECT DB_NAME() کنترل کنید.
  • نام‌های شیء را همراه Schema بنویسید و از حدس Schema پیش‌فرض دوری کنید.
  • برای NULL پیام تشخیصی بسازید و آن را خودکار به صفر تبدیل نکنید.
  • نتیجه را با نمای کاتالوگ مرتبط، مانند sys.objects، sys.columns یا sys.types، تطبیق دهید.
  • مجوز مشاهده متادیتا را با کمترین سطح دسترسی لازم طراحی کنید.

ملاحظات کارایی و بهینه‌سازی Query

هزینه یک اجرای DB_ID معمولاً در مقایسه با خواندن داده‌های بزرگ ناچیز است، ولی قرار دادن آن روی هر ردیف یک DMV یا کاتالوگ بزرگ می‌تواند CPU و زمان اجرای قابل مشاهده بسازد. وقتی ورودی ثابت است، مقدار را یک‌بار در متغیر ذخیره کنید. وقتی چند ویژگی از هزاران شیء لازم است، Join مستقیم به نماهای sys اغلب Plan شفاف‌تری ایجاد می‌کند.

برای اندازه‌گیری واقعی، SET STATISTICS IO, TIME ON و Actual Execution Plan را در محیط آزمایشی فعال کنید. نسخه تابعی و نسخه Join را با داده و مجوز یکسان مقایسه کنید. از Scalar Function در سمت ستون شرط، اگر تبدیل مستقیم به شناسه یا Join ممکن است، پرهیز کنید تا Predicate ساده‌تر باقی بماند.

SET STATISTICS IO, TIME ON;
    DECLARE @ContextName sysname = DB_NAME();
    -- Query مبتنی بر متادیتا را اینجا اجرا و Plan واقعی را بررسی کنید.
    SELECT @ContextName AS DatabaseContext;
    SET STATISTICS IO, TIME OFF;
    

هدف بهینه‌سازی حذف کورکورانه تابع نیست؛ هدف آن است که تابع در نقطه‌ای اجرا شود که اطلاعات لازم را با کمترین تکرار و روشن‌ترین قرارداد فراهم کند. تغییر باید با اندازه‌گیری قبل و بعد تأیید شود.

بهترین روش‌ها و کاربرد در پروژه سازمانی

  1. نام پایگاه داده و Schema را بخشی از قرارداد اجرای اسکریپت بدانید.
  2. خروجی DB_ID را به‌همراه ورودی و Context در لاگ خطا ثبت کنید.
  3. برای Migration، شرط وجود را با نوع شیء مورد انتظار ترکیب کنید.
  4. در کد تولیدی، شاخه جداگانه‌ای برای NULL و نبود مجوز در نظر بگیرید.
  5. برای گزارش‌های انبوه، نماهای کاتالوگ را با نسخه تابعی Benchmark کنید.
  6. شناسه‌های داخلی را میان Development، Test و Production کپی نکنید.
  7. SQL پویا را با QUOTENAME و sp_executesql ایمن کنید.
  8. تست خودکار را پس از تغییر Schema و ارتقای نسخه SQL Server اجرا کنید.

یک کاربرد واقعی DB_ID، ساخت ماژول Metadata-driven برای فیلتر DMVها، ساخت اسکریپت‌های مدیریتی، کنترل Context و اتصال نام منطقی پایگاه داده به شناسه داخلی است. چنین ماژولی باید خروجی نسخه‌بندی‌شده، کنترل مجوز، ثبت زمان اجرا و تست بازگشت داشته باشد. در پروژه‌های حساس، نتیجه با منبع دوم مانند نمای کاتالوگ تطبیق داده می‌شود تا تغییرات غیرمنتظره سریع شناسایی شوند.

سؤالات متداول اختصاصی

۱. تابع DB_ID دقیقاً چه مسئله‌ای را حل می‌کند؟

DB_ID برای تبدیل نام پایگاه داده به شناسه داخلی آن در نمونه SQL Server به کار می‌رود. مزیت آن این است که به‌جای حدس‌زدن یا Hard-code کردن شناسه‌ها و نام‌ها، پاسخ را از متادیتای همان Context دریافت می‌کنیم. در یک سامانه حرفه‌ای، خروجی باید همراه با کنترل NULL و ثبت Context مصرف شود تا نتیجه قابل اعتماد و قابل عیب‌یابی باشد.

۲. برای شروع استفاده از DB_ID چه پیش‌نیازی لازم است؟

کاربر باید در پایگاه داده درست متصل باشد، ورودی معتبر بدهد و اجازه مشاهده متادیتای شیء هدف را داشته باشد. بهتر است ابتدا نمونه ساده مقاله اجرا شود و سپس Query با نام‌های واقعی Schema و اشیای سازمان جایگزین گردد. برای رشته‌های فارسی نیز پیشوند N باید حفظ شود.

۳. آیا آموزش و پیاده‌سازی سازمانی DB_ID ارزش تجاری دارد؟

بله؛ استفاده صحیح از متادیتا زمان توسعه ابزارهای گزارش‌گیری، مهاجرت، ممیزی و نگهداری را کم می‌کند و خطای انسانی ناشی از مقادیر ثابت را کاهش می‌دهد. در دوره آموزشی یا مشاوره SQL Server می‌توان این تابع را در قالب یک چارچوب Metadata-driven واقعی، همراه با تست و کنترل مجوزها، پیاده‌سازی کرد.

۴. DB_ID چگونه هزینه پروژه‌های پایگاه داده را کاهش می‌دهد؟

وقتی قواعد کشف Schema یک‌بار و درست نوشته شوند، همان کد در چند محیط و چند نسخه پایگاه داده قابل استفاده است. این کار دوباره‌کاری در Deployment و گزارش‌سازی را کم می‌کند. البته صرف استفاده از تابع کافی نیست و باید قرارداد نام‌گذاری، ثبت خطا و آزمون تغییرات نیز در پروژه تعریف شود.

۵. تفاوت استفاده از DB_ID با خواندن مستقیم نماهای sys چیست؟

DB_ID برای دریافت یک ویژگی یا تبدیل مشخص، کوتاه و خواناست؛ در مقابل، نماهای کاتالوگ sys برای گزارش انبوه، فیلتر چندویژگی و Joinهای تحلیلی انعطاف بیشتری دارند. انتخاب درست به حجم داده، نیاز به جزئیات و شکل Plan بستگی دارد و در بسیاری از ابزارها هر دو روش کنار هم استفاده می‌شوند.

۶. آیا می‌توان برای طراحی ابزار یا گزارش اختصاصی DB_ID مشاوره گرفت؟

بله؛ در یک خدمت تحلیل یا اجرای پروژه SQL Server ابتدا سناریو، مجوزها، نسخه موتور و اندازه کاتالوگ بررسی می‌شود. سپس Queryهای متادیتا با خروجی پایدار، لاگ خطا، تست خودکار و مستندات تحویل داده می‌شوند تا ابزار به یک نمونه نمایشی محدود نماند.

۷. رایج‌ترین خطای DB_ID چیست؟

رایج‌ترین خطا تفسیر NULL به‌عنوان پاسخ منفی قطعی است؛ درحالی‌که NULL ممکن است از ورودی نامعتبر، Context اشتباه یا نبود مجوز مشاهده متادیتا ناشی شود. خطای دیگر استفاده از نام بدون Schema یا فرض ثابت بودن شناسه‌ها میان پایگاه‌های داده است. خروجی برای نام ناموجود یا متادیتای خارج از سطح دسترسی می‌تواند NULL باشد و شناسه‌ها را نباید میان سرورها ثابت فرض کرد.

۸. اجرای DB_ID چه اثری بر Performance دارد؟

یک فراخوانی منفرد معمولاً بسیار سبک است، اما اجرای تابع برای هر ردیف یک مجموعه بزرگ یا در شرطی که Join مستقیم کاتالوگ مناسب‌تر است می‌تواند هزینه اضافی بسازد. مقدارهای ثابت را یک‌بار در متغیر محاسبه کنید، Actual Execution Plan و STATISTICS IO را بررسی کنید و برای گزارش‌های انبوه از نماهای sys استفاده آگاهانه داشته باشید.

۹. Best Practice اصلی برای DB_ID چیست؟

Context را صریح نگه دارید، نام‌ها را Schema-qualified بنویسید، ورودی و خروجی NULL را کنترل کنید و شناسه‌های متادیتا را در محیط دیگر Hard-code نکنید. همچنین اگر خروجی وارد SQL پویا می‌شود، نام اشیا را با QUOTENAME محصور کنید و مقدارهای داده را پارامتری نگه دارید.

۱۰. DB_ID با کدام نسخه‌های SQL Server سازگار است؟

این تابع از توابع جاافتاده Transact-SQL است، اما دامنه propertyها، مجوزهای لازم و سطح پشتیبانی در SQL Server، Azure SQL Database، Managed Instance و سرویس‌های تحلیلی می‌تواند متفاوت باشد. پیش از استقرار، مستندات نسخه هدف و Compatibility Level را بررسی و Query را در محیط آزمایشی همان پلتفرم اجرا کنید.

سؤالات مصاحبه SQL Server

۱. چرا DB_ID ممکن است NULL برگرداند؟

ورودی نامعتبر، Context نادرست، property ناسازگار یا محدودیت Metadata Visibility از علت‌های اصلی هستند. پاسخ حرفه‌ای باید روش تفکیک این علت‌ها را نیز توضیح دهد.

۲. چه زمانی نمای sys را به DB_ID ترجیح می‌دهید؟

وقتی چند ستون متادیتا برای مجموعه بزرگی از اشیا لازم است، Join و فیلتر مستقیم کاتالوگ معمولاً خواناتر و قابل‌بهینه‌سازی‌تر است. برای یک تبدیل یا ویژگی منفرد، تابع می‌تواند ساده‌تر باشد.

۳. چرا شناسه‌های متادیتا نباید Hard-code شوند؟

زیرا شناسه‌ها در پایگاه دیگر، پس از بازسازی شیء یا در محیط استقرار متفاوت می‌توانند تغییر کنند. نام معتبر یا کاتالوگ باید در زمان اجرا شناسه را حل کند.

۴. Metadata Visibility چه اثری بر نتیجه دارد؟

کاربر معمولاً فقط متادیتای Securableهایی را می‌بیند که مالک آن‌هاست یا مجوز مرتبط دارد. بنابراین NULL الزاماً نبود شیء را ثابت نمی‌کند.

۵. چگونه کارایی Query متادیتا را می‌سنجید؟

نسخه‌ها را با IO، TIME، Plan واقعی، تعداد ردیف و مجوز یکسان مقایسه می‌کنم و تکرار تابع، Predicate و Joinهای کاتالوگ را بررسی می‌کنم.

چک‌لیست نهایی

  • Syntax تابع DB_ID با نوع ورودی صحیح نوشته شده است.
  • Context پایگاه داده و Schema پیش از اجرا کنترل شده‌اند.
  • NULL، صفر و یک بر اساس قرارداد property از هم تفکیک شده‌اند.
  • هیچ شناسه داخلی بین محیط‌ها Hard-code نشده است.
  • نام‌های واردشده به SQL پویا با QUOTENAME ایمن شده‌اند.
  • نسخه کاتالوگی برای گزارش‌های انبوه بررسی و Benchmark شده است.
  • مجوز مشاهده متادیتا با اصل حداقل دسترسی تنظیم شده است.
  • تست پس از تغییر Schema و ارتقای SQL Server وجود دارد.

جمع‌بندی

DB_ID ابزاری دقیق برای تبدیل نام پایگاه داده به شناسه داخلی آن در نمونه SQL Server است، به شرط آنکه Context، مجوز و معنای NULL جدی گرفته شود. مثال‌های این مقاله نشان دادند چگونه از Query ساده به ممیزی سازمانی، مدیریت خطا و انتخاب روش کاراتر برسیم.

برای مقایسه این تابع با سایر اعضای خانواده و دسترسی به مقاله‌های مرتبط، به مقاله مادر توابع Metadata در SQL Server بازگردید. در پیاده‌سازی نهایی، مستندات نسخه هدف و Plan واقعی Query مرجع تصمیم باشند.

 

0 نظر

نظر محترم شما در مورد مقاله های وب سایت برنامه نویسی و پایگاه داده

نظرات محترم شما در خدمات رسانی بهتر ما را یاری می نمایند. لطفا اگر مایل بودید یک نظر ما را مهمان فرمائید. آدرس ایمیل و وب سایت شما نمایش داده نخواهد شد.

حرف 500 حداکثر

اطلاعات تماس

  • آدرس:اصفهان-خیابان ام کلثوم غربی - بعد خیابان تخم چی - بیست متر بعد از پیتزا ننه شب - کوچه تعمیر گاه سمار زغالی - پلاک 354 - درب مشکی - طبقه هفتم
  • آدرس ایمیل:najafzade@gmail.com
  • وب سایت:http://www.a00b.com/
  • تلفن ثابت:(+98)9131253620
  • تلفن همراه:09131253620