آموزش جامع تابع FILE_ID در SQL Server؛ از Syntax تا بهینهسازی
مقدمه و جایگاه تابع در SQL Server
تابع FILE_ID یکی از ابزارهای مهم متادیتا در Microsoft SQL Server است و برای تبدیل نام منطقی فایل پایگاه داده جاری به شناسه فایل استفاده میشود. متادیتا دادهای درباره ساختار و وضعیت دادههاست؛ بنابراین پاسخ این تابع به محتوای رکوردهای تجاری وابسته نیست، بلکه به Context پایگاه داده، کاتالوگ سیستم، نوع ورودی و سطح دسترسی کاربر ارتباط دارد.
در پروژههای واقعی، FILE_ID در گزارش فضای فایل، عملیات DBCC وابسته به فایل، نگاشت کاتالوگ sys.database_files و اسکریپتهای نگهداری به کار میرود. استفاده حرفهای فقط نوشتن یک SELECT کوتاه نیست؛ باید تفاوت مقدار معتبر، صفر و NULL، اثر Metadata Visibility، نامگذاری Schema-qualified و هزینه اجرای تکراری تابع را نیز شناخت.
این راهنما از مثال پایه آغاز میکند و تا سناریوهای ممیزی، گزارشگیری و بهینهسازی پیش میرود. برای مشاهده نقشه کامل این خانواده، راهنمای جامع توابع متادیتا در SQL Server را نیز مطالعه کنید.
تعریف، Syntax و قرارداد خروجی FILE_ID
FILE_ID به زبان ساده تبدیل نام منطقی فایل پایگاه داده جاری به شناسه فایل را انجام میدهد. موتور SQL Server ورودی را در Context جاری تفسیر میکند و نتیجهای با نوع smallint برمیگرداند. اگر ورودی به شیء معتبر اشاره نکند، property پشتیبانی نشود یا کاربر اجازه دیدن متادیتا را نداشته باشد، نتیجه میتواند NULL باشد.
نحو استاندارد
SELECT FILE_ID ( file_name ) AS Result;
پارامترها
file_name نام منطقی فایل در پایگاه داده جاری است؛ این نام با نام فیزیکی فایل روی دیسک تفاوت دارد.
نوع خروجی و معنای NULL
نوع اعلامشده خروجی smallint است. برنامه مصرفکننده باید NULL را یک حالت مستقل بداند و پیش از تبدیل نوع یا تصمیمگیری، علت آن را بررسی کند. تابع در Context پایگاه داده جاری عمل میکند و نوع خروجی smallint است؛ برای شناسه int و سناریوهای جدید FILE_IDEX را نیز بررسی کنید.
| موضوع | توضیح فنی |
|---|
| کاربرد اصلی | تبدیل نام منطقی فایل پایگاه داده جاری به شناسه فایل |
| نوع خروجی | smallint |
| Context | پایگاه داده یا نشست جاری، مطابق قرارداد تابع |
| حالت NULL | ورودی نامعتبر، نبود شیء یا نبود مجوز مشاهده متادیتا |
| کاربرد سازمانی | گزارش فضای فایل، عملیات DBCC وابسته به فایل، نگاشت کاتالوگ sys.database_files و اسکریپتهای نگهداری |
اصل مهم: خروجی تابع FILE_ID را داده امنیتی قابل اعتماد فرض نکنید مگر اینکه مستندات همان property و مجوزهای Context این برداشت را تأیید کنند.
مثالهای عملی مستقل و قابل اجرا
مثال 1: شناسه فایل داده اصلی
در این سناریو میخواهیم شناسه فایل داده اصلی را با تابع FILE_ID پیادهسازی کنیم. Query زیر مستقل طراحی شده است؛ اگر به جدول پروژه اشاره دارد، نام Schema و شیء را با ساختار واقعی محیط خود هماهنگ کنید و پیش از اجرای عملیاتی سطح دسترسی را کنترل نمایید.
DECLARE @LogicalName sysname = DB_NAME();
SELECT FILE_ID(@LogicalName) AS FileId;
| فیلد یا ستون | خروجی نمونه |
|---|
| FileId | 1 |
نکته کاربردی این مثال: در بسیاری از پایگاهها نام فایل اصلی با نام پایگاه برابر است، اما قطعی نیست. نتیجه نمایشدادهشده نمونه است و شناسهها، نامها یا اندازهها ممکن است در سرور شما متفاوت باشند؛ معیار صحت، منطق Query و متادیتای واقعی محیط است.
مثال 2: خواندن نام منطقی و تبدیل آن
در این سناریو میخواهیم خواندن نام منطقی و تبدیل آن را با تابع FILE_ID پیادهسازی کنیم. Query زیر مستقل طراحی شده است؛ اگر به جدول پروژه اشاره دارد، نام Schema و شیء را با ساختار واقعی محیط خود هماهنگ کنید و پیش از اجرای عملیاتی سطح دسترسی را کنترل نمایید.
SELECT name AS LogicalName, FILE_ID(name) AS FileId
FROM sys.database_files;
| فیلد یا ستون | خروجی نمونه |
|---|
| LogicalName | a00b |
| FileId | 1 |
نکته کاربردی این مثال: این Query مستقل از حدس نام فایل عمل میکند. نتیجه نمایشدادهشده نمونه است و شناسهها، نامها یا اندازهها ممکن است در سرور شما متفاوت باشند؛ معیار صحت، منطق Query و متادیتای واقعی محیط است.
مثال 3: استفاده در SELECT با داده نمونه
در این سناریو میخواهیم استفاده در SELECT با داده نمونه را با تابع FILE_ID پیادهسازی کنیم. Query زیر مستقل طراحی شده است؛ اگر به جدول پروژه اشاره دارد، نام Schema و شیء را با ساختار واقعی محیط خود هماهنگ کنید و پیش از اجرای عملیاتی سطح دسترسی را کنترل نمایید.
DECLARE @Files TABLE(LogicalName sysname);
INSERT INTO @Files SELECT name FROM sys.database_files;
SELECT LogicalName, FILE_ID(LogicalName) AS FileId FROM @Files;
| فیلد یا ستون | خروجی نمونه |
|---|
| LogicalName | a00b_log |
| FileId | 2 |
نکته کاربردی این مثال: نام منطقی از متادیتای جاری جمعآوری شده است. نتیجه نمایشدادهشده نمونه است و شناسهها، نامها یا اندازهها ممکن است در سرور شما متفاوت باشند؛ معیار صحت، منطق Query و متادیتای واقعی محیط است.
مثال 4: فیلتر فایل مشخص
در این سناریو میخواهیم فیلتر فایل مشخص را با تابع FILE_ID پیادهسازی کنیم. Query زیر مستقل طراحی شده است؛ اگر به جدول پروژه اشاره دارد، نام Schema و شیء را با ساختار واقعی محیط خود هماهنگ کنید و پیش از اجرای عملیاتی سطح دسترسی را کنترل نمایید.
DECLARE @Name sysname = (SELECT TOP (1) name FROM sys.database_files WHERE type = 0);
SELECT file_id, name FROM sys.database_files WHERE file_id = FILE_ID(@Name);
| فیلد یا ستون | خروجی نمونه |
|---|
| file_id | 1 |
| name | a00b |
نکته کاربردی این مثال: فیلتر روی file_id ساده و روشن است. نتیجه نمایشدادهشده نمونه است و شناسهها، نامها یا اندازهها ممکن است در سرور شما متفاوت باشند؛ معیار صحت، منطق Query و متادیتای واقعی محیط است.
مثال 5: ترکیب با FILE_NAME
در این سناریو میخواهیم ترکیب با FILE_NAME را با تابع FILE_ID پیادهسازی کنیم. Query زیر مستقل طراحی شده است؛ اگر به جدول پروژه اشاره دارد، نام Schema و شیء را با ساختار واقعی محیط خود هماهنگ کنید و پیش از اجرای عملیاتی سطح دسترسی را کنترل نمایید.
DECLARE @Name sysname = (SELECT TOP (1) name FROM sys.database_files);
SELECT FILE_NAME(FILE_ID(@Name)) AS RoundTripName;
| فیلد یا ستون | خروجی نمونه |
|---|
| RoundTripName | a00b |
نکته کاربردی این مثال: تبدیل رفتوبرگشتی نام منطقی را اعتبارسنجی میکند. نتیجه نمایشدادهشده نمونه است و شناسهها، نامها یا اندازهها ممکن است در سرور شما متفاوت باشند؛ معیار صحت، منطق Query و متادیتای واقعی محیط است.
مثال 6: نام ناموجود و NULL
در این سناریو میخواهیم نام ناموجود و NULL را با تابع FILE_ID پیادهسازی کنیم. Query زیر مستقل طراحی شده است؛ اگر به جدول پروژه اشاره دارد، نام Schema و شیء را با ساختار واقعی محیط خود هماهنگ کنید و پیش از اجرای عملیاتی سطح دسترسی را کنترل نمایید.
SELECT COALESCE(CONVERT(nvarchar(10), FILE_ID(N'NoSuchLogicalFile')), N'NULL') AS Result;
| فیلد یا ستون | خروجی نمونه |
|---|
| Result | NULL |
نکته کاربردی این مثال: نام فیزیکی یا نام ناموجود قابل حل نیست. نتیجه نمایشدادهشده نمونه است و شناسهها، نامها یا اندازهها ممکن است در سرور شما متفاوت باشند؛ معیار صحت، منطق Query و متادیتای واقعی محیط است.
مثال 7: تفکیک نام منطقی از مسیر فیزیکی
در این سناریو میخواهیم تفکیک نام منطقی از مسیر فیزیکی را با تابع FILE_ID پیادهسازی کنیم. Query زیر مستقل طراحی شده است؛ اگر به جدول پروژه اشاره دارد، نام Schema و شیء را با ساختار واقعی محیط خود هماهنگ کنید و پیش از اجرای عملیاتی سطح دسترسی را کنترل نمایید.
SELECT name AS LogicalName, physical_name, FILE_ID(name) AS FileId
FROM sys.database_files;
| فیلد یا ستون | خروجی نمونه |
|---|
| LogicalName | a00b |
| physical_name | D:\SQLData\a00b.mdf |
| FileId | 1 |
نکته کاربردی این مثال: FILE_ID مسیر فیزیکی را بهعنوان ورودی نمیپذیرد. نتیجه نمایشدادهشده نمونه است و شناسهها، نامها یا اندازهها ممکن است در سرور شما متفاوت باشند؛ معیار صحت، منطق Query و متادیتای واقعی محیط است.
مثال 8: گزارش ظرفیت فایل انتخابی
در این سناریو میخواهیم گزارش ظرفیت فایل انتخابی را با تابع FILE_ID پیادهسازی کنیم. Query زیر مستقل طراحی شده است؛ اگر به جدول پروژه اشاره دارد، نام Schema و شیء را با ساختار واقعی محیط خود هماهنگ کنید و پیش از اجرای عملیاتی سطح دسترسی را کنترل نمایید.
DECLARE @FileId int = (SELECT TOP (1) file_id FROM sys.database_files WHERE type = 0);
SELECT FILE_NAME(@FileId) AS LogicalName, size * 8.0 / 1024 AS SizeMB
FROM sys.database_files WHERE file_id = @FileId;
| فیلد یا ستون | خروجی نمونه |
|---|
| LogicalName | a00b |
| SizeMB | 512.000000 |
نکته کاربردی این مثال: محاسبه اندازه از صفحههای ۸ کیلوبایتی انجام میشود. نتیجه نمایشدادهشده نمونه است و شناسهها، نامها یا اندازهها ممکن است در سرور شما متفاوت باشند؛ معیار صحت، منطق Query و متادیتای واقعی محیط است.
مثال 9: روش اشتباه و نسخه صحیح
در این سناریو میخواهیم روش اشتباه و نسخه صحیح را با تابع FILE_ID پیادهسازی کنیم. Query زیر مستقل طراحی شده است؛ اگر به جدول پروژه اشاره دارد، نام Schema و شیء را با ساختار واقعی محیط خود هماهنگ کنید و پیش از اجرای عملیاتی سطح دسترسی را کنترل نمایید.
-- اشتباه: FILE_ID(N'D:\SQLData\a00b.mdf')
DECLARE @LogicalName sysname = (SELECT TOP (1) name FROM sys.database_files);
SELECT FILE_ID(@LogicalName) AS CorrectFileId;
| فیلد یا ستون | خروجی نمونه |
|---|
| CorrectFileId | 1 |
نکته کاربردی این مثال: همیشه logical file name را از کاتالوگ بگیرید. نتیجه نمایشدادهشده نمونه است و شناسهها، نامها یا اندازهها ممکن است در سرور شما متفاوت باشند؛ معیار صحت، منطق Query و متادیتای واقعی محیط است.
مثال 10: مقایسه روش تابعی و Join کاتالوگ
در این سناریو میخواهیم مقایسه روش تابعی و Join کاتالوگ را با تابع FILE_ID پیادهسازی کنیم. Query زیر مستقل طراحی شده است؛ اگر به جدول پروژه اشاره دارد، نام Schema و شیء را با ساختار واقعی محیط خود هماهنگ کنید و پیش از اجرای عملیاتی سطح دسترسی را کنترل نمایید.
SELECT f.file_id, f.name, FILE_ID(f.name) AS VerifiedFileId
FROM sys.database_files AS f
WHERE f.type IN (0,1);
| فیلد یا ستون | خروجی نمونه |
|---|
| file_id | 1 |
| name | a00b |
| VerifiedFileId | 1 |
نکته کاربردی این مثال: برای گزارش انبوه خود file_id موجود در کاتالوگ کافی است. نتیجه نمایشدادهشده نمونه است و شناسهها، نامها یا اندازهها ممکن است در سرور شما متفاوت باشند؛ معیار صحت، منطق Query و متادیتای واقعی محیط است.
خطاهای رایج و روش عیبیابی
نخستین خطای رایج در FILE_ID اجرای Query در پایگاه داده نادرست است. قبل از تحلیل نتیجه، DB_NAME()، نام Schema و شناسه ورودی را ثبت کنید. اگر خروجی NULL است، جداگانه وجود شیء، صحت نام، نوع شیء و مجوز VIEW DEFINITION یا مجوز مرتبط را بررسی کنید.
خطای دوم، چسباندن خروجی تابع به SQL پویا بدون اعتبارسنجی است. نامی که قرار است بهعنوان Identifier استفاده شود باید از منبع مورد اعتماد بیاید و با QUOTENAME محصور شود؛ مقدارهای تجاری نیز باید با sp_executesql پارامتری شوند. تابع در Context پایگاه داده جاری عمل میکند و نوع خروجی smallint است؛ برای شناسه int و سناریوهای جدید FILE_IDEX را نیز بررسی کنید.
- Context جاری را با SELECT DB_NAME() کنترل کنید.
- نامهای شیء را همراه Schema بنویسید و از حدس Schema پیشفرض دوری کنید.
- برای NULL پیام تشخیصی بسازید و آن را خودکار به صفر تبدیل نکنید.
- نتیجه را با نمای کاتالوگ مرتبط، مانند sys.objects، sys.columns یا sys.types، تطبیق دهید.
- مجوز مشاهده متادیتا را با کمترین سطح دسترسی لازم طراحی کنید.
ملاحظات کارایی و بهینهسازی Query
هزینه یک اجرای FILE_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;
هدف بهینهسازی حذف کورکورانه تابع نیست؛ هدف آن است که تابع در نقطهای اجرا شود که اطلاعات لازم را با کمترین تکرار و روشنترین قرارداد فراهم کند. تغییر باید با اندازهگیری قبل و بعد تأیید شود.
بهترین روشها و کاربرد در پروژه سازمانی
- نام پایگاه داده و Schema را بخشی از قرارداد اجرای اسکریپت بدانید.
- خروجی FILE_ID را بههمراه ورودی و Context در لاگ خطا ثبت کنید.
- برای Migration، شرط وجود را با نوع شیء مورد انتظار ترکیب کنید.
- در کد تولیدی، شاخه جداگانهای برای NULL و نبود مجوز در نظر بگیرید.
- برای گزارشهای انبوه، نماهای کاتالوگ را با نسخه تابعی Benchmark کنید.
- شناسههای داخلی را میان Development، Test و Production کپی نکنید.
- SQL پویا را با QUOTENAME و sp_executesql ایمن کنید.
- تست خودکار را پس از تغییر Schema و ارتقای نسخه SQL Server اجرا کنید.
یک کاربرد واقعی FILE_ID، ساخت ماژول Metadata-driven برای گزارش فضای فایل، عملیات DBCC وابسته به فایل، نگاشت کاتالوگ sys.database_files و اسکریپتهای نگهداری است. چنین ماژولی باید خروجی نسخهبندیشده، کنترل مجوز، ثبت زمان اجرا و تست بازگشت داشته باشد. در پروژههای حساس، نتیجه با منبع دوم مانند نمای کاتالوگ تطبیق داده میشود تا تغییرات غیرمنتظره سریع شناسایی شوند.
سؤالات متداول اختصاصی
۱. تابع FILE_ID دقیقاً چه مسئلهای را حل میکند؟
FILE_ID برای تبدیل نام منطقی فایل پایگاه داده جاری به شناسه فایل به کار میرود. مزیت آن این است که بهجای حدسزدن یا Hard-code کردن شناسهها و نامها، پاسخ را از متادیتای همان Context دریافت میکنیم. در یک سامانه حرفهای، خروجی باید همراه با کنترل NULL و ثبت Context مصرف شود تا نتیجه قابل اعتماد و قابل عیبیابی باشد.
۲. برای شروع استفاده از FILE_ID چه پیشنیازی لازم است؟
کاربر باید در پایگاه داده درست متصل باشد، ورودی معتبر بدهد و اجازه مشاهده متادیتای شیء هدف را داشته باشد. بهتر است ابتدا نمونه ساده مقاله اجرا شود و سپس Query با نامهای واقعی Schema و اشیای سازمان جایگزین گردد. برای رشتههای فارسی نیز پیشوند N باید حفظ شود.
۳. آیا آموزش و پیادهسازی سازمانی FILE_ID ارزش تجاری دارد؟
بله؛ استفاده صحیح از متادیتا زمان توسعه ابزارهای گزارشگیری، مهاجرت، ممیزی و نگهداری را کم میکند و خطای انسانی ناشی از مقادیر ثابت را کاهش میدهد. در دوره آموزشی یا مشاوره SQL Server میتوان این تابع را در قالب یک چارچوب Metadata-driven واقعی، همراه با تست و کنترل مجوزها، پیادهسازی کرد.
۴. FILE_ID چگونه هزینه پروژههای پایگاه داده را کاهش میدهد؟
وقتی قواعد کشف Schema یکبار و درست نوشته شوند، همان کد در چند محیط و چند نسخه پایگاه داده قابل استفاده است. این کار دوبارهکاری در Deployment و گزارشسازی را کم میکند. البته صرف استفاده از تابع کافی نیست و باید قرارداد نامگذاری، ثبت خطا و آزمون تغییرات نیز در پروژه تعریف شود.
۵. تفاوت استفاده از FILE_ID با خواندن مستقیم نماهای sys چیست؟
FILE_ID برای دریافت یک ویژگی یا تبدیل مشخص، کوتاه و خواناست؛ در مقابل، نماهای کاتالوگ sys برای گزارش انبوه، فیلتر چندویژگی و Joinهای تحلیلی انعطاف بیشتری دارند. انتخاب درست به حجم داده، نیاز به جزئیات و شکل Plan بستگی دارد و در بسیاری از ابزارها هر دو روش کنار هم استفاده میشوند.
۶. آیا میتوان برای طراحی ابزار یا گزارش اختصاصی FILE_ID مشاوره گرفت؟
بله؛ در یک خدمت تحلیل یا اجرای پروژه SQL Server ابتدا سناریو، مجوزها، نسخه موتور و اندازه کاتالوگ بررسی میشود. سپس Queryهای متادیتا با خروجی پایدار، لاگ خطا، تست خودکار و مستندات تحویل داده میشوند تا ابزار به یک نمونه نمایشی محدود نماند.
۷. رایجترین خطای FILE_ID چیست؟
رایجترین خطا تفسیر NULL بهعنوان پاسخ منفی قطعی است؛ درحالیکه NULL ممکن است از ورودی نامعتبر، Context اشتباه یا نبود مجوز مشاهده متادیتا ناشی شود. خطای دیگر استفاده از نام بدون Schema یا فرض ثابت بودن شناسهها میان پایگاههای داده است. تابع در Context پایگاه داده جاری عمل میکند و نوع خروجی smallint است؛ برای شناسه int و سناریوهای جدید FILE_IDEX را نیز بررسی کنید.
۸. اجرای FILE_ID چه اثری بر Performance دارد؟
یک فراخوانی منفرد معمولاً بسیار سبک است، اما اجرای تابع برای هر ردیف یک مجموعه بزرگ یا در شرطی که Join مستقیم کاتالوگ مناسبتر است میتواند هزینه اضافی بسازد. مقدارهای ثابت را یکبار در متغیر محاسبه کنید، Actual Execution Plan و STATISTICS IO را بررسی کنید و برای گزارشهای انبوه از نماهای sys استفاده آگاهانه داشته باشید.
۹. Best Practice اصلی برای FILE_ID چیست؟
Context را صریح نگه دارید، نامها را Schema-qualified بنویسید، ورودی و خروجی NULL را کنترل کنید و شناسههای متادیتا را در محیط دیگر Hard-code نکنید. همچنین اگر خروجی وارد SQL پویا میشود، نام اشیا را با QUOTENAME محصور کنید و مقدارهای داده را پارامتری نگه دارید.
۱۰. FILE_ID با کدام نسخههای SQL Server سازگار است؟
این تابع از توابع جاافتاده Transact-SQL است، اما دامنه propertyها، مجوزهای لازم و سطح پشتیبانی در SQL Server، Azure SQL Database، Managed Instance و سرویسهای تحلیلی میتواند متفاوت باشد. پیش از استقرار، مستندات نسخه هدف و Compatibility Level را بررسی و Query را در محیط آزمایشی همان پلتفرم اجرا کنید.
سؤالات مصاحبه SQL Server
۱. چرا FILE_ID ممکن است NULL برگرداند؟
ورودی نامعتبر، Context نادرست، property ناسازگار یا محدودیت Metadata Visibility از علتهای اصلی هستند. پاسخ حرفهای باید روش تفکیک این علتها را نیز توضیح دهد.
۲. چه زمانی نمای sys را به FILE_ID ترجیح میدهید؟
وقتی چند ستون متادیتا برای مجموعه بزرگی از اشیا لازم است، Join و فیلتر مستقیم کاتالوگ معمولاً خواناتر و قابلبهینهسازیتر است. برای یک تبدیل یا ویژگی منفرد، تابع میتواند سادهتر باشد.
۳. چرا شناسههای متادیتا نباید Hard-code شوند؟
زیرا شناسهها در پایگاه دیگر، پس از بازسازی شیء یا در محیط استقرار متفاوت میتوانند تغییر کنند. نام معتبر یا کاتالوگ باید در زمان اجرا شناسه را حل کند.
۴. Metadata Visibility چه اثری بر نتیجه دارد؟
کاربر معمولاً فقط متادیتای Securableهایی را میبیند که مالک آنهاست یا مجوز مرتبط دارد. بنابراین NULL الزاماً نبود شیء را ثابت نمیکند.
۵. چگونه کارایی Query متادیتا را میسنجید؟
نسخهها را با IO، TIME، Plan واقعی، تعداد ردیف و مجوز یکسان مقایسه میکنم و تکرار تابع، Predicate و Joinهای کاتالوگ را بررسی میکنم.
چکلیست نهایی
- Syntax تابع FILE_ID با نوع ورودی صحیح نوشته شده است.
- Context پایگاه داده و Schema پیش از اجرا کنترل شدهاند.
- NULL، صفر و یک بر اساس قرارداد property از هم تفکیک شدهاند.
- هیچ شناسه داخلی بین محیطها Hard-code نشده است.
- نامهای واردشده به SQL پویا با QUOTENAME ایمن شدهاند.
- نسخه کاتالوگی برای گزارشهای انبوه بررسی و Benchmark شده است.
- مجوز مشاهده متادیتا با اصل حداقل دسترسی تنظیم شده است.
- تست پس از تغییر Schema و ارتقای SQL Server وجود دارد.
جمعبندی
FILE_ID ابزاری دقیق برای تبدیل نام منطقی فایل پایگاه داده جاری به شناسه فایل است، به شرط آنکه Context، مجوز و معنای NULL جدی گرفته شود. مثالهای این مقاله نشان دادند چگونه از Query ساده به ممیزی سازمانی، مدیریت خطا و انتخاب روش کاراتر برسیم.
برای مقایسه این تابع با سایر اعضای خانواده و دسترسی به مقالههای مرتبط، به مقاله مادر توابع Metadata در SQL Server بازگردید. در پیادهسازی نهایی، مستندات نسخه هدف و Plan واقعی Query مرجع تصمیم باشند.