مقایسه sys.tables sys.columns sys.system_columns sys.all_columns در SQL Server راهنمای متا دیتا

مقایسه sys.tables، sys.columns، sys.system_columns و sys.all_columns در SQL Server: راهنمای جامع متا دیتا

در SQL Server، نماهای سیستمی (System Views) اطلاعات فراوانی درباره پایگاه داده و اشیاء آن ارائه می‌دهند. چهار نمای سیستمی کلیدی شامل sys.tables، sys.columns، sys.system_columns و sys.all_columns اغلب برای کوئری‌نویسی و استخراج فراداده (Metadata) استفاده می‌شوند. درک دقیق تفاوت‌های این نماها برای توسعه‌دهندگان و مدیران دیتابیس در مدیریت و بهینه‌سازی SQL Server بسیار مهم است و به کارایی و دقت در عملیات دیتابیس کمک شایانی می‌کند.

sys.tables

نمای sys.tables لیست تمام جداول تعریف شده توسط کاربر و جداول سیستمی را که به عنوان جداول پایه (base tables) شناخته می‌شوند، ارائه می‌دهد. این نما اطلاعاتی نظیر نام جدول، شناسه‌ شیء (object_id) و سایر ویژگی‌های مرتبط با خود جدول را در بر می‌گیرد، اما جزئیات مربوط به ستون‌ها را مستقیماً نشان نمی‌دهد. استفاده از sys.tables برای مشاهده سریع ساختار کلی جداول در یک پایگاه داده یا شناسایی جداول خاص مفید است و یک نقطه شروع عالی برای کاوش در ساختار دیتابیس محسوب می‌شود.


SELECT
    t.name AS TableName,
    t.object_id AS TableId,
    t.create_date AS CreateDate,
    t.modify_date AS ModifyDate
FROM
    sys.tables AS t
ORDER BY
    TableName;

sys.columns

sys.columns نمایی حیاتی است که اطلاعات دقیق ستون‌ها را برای تمام جداول و نماهای تعریف شده توسط کاربر (user-defined tables and views) فراهم می‌کند. این نما جزئیاتی مانند نام ستون، نوع داده، قابلیت Null بودن (nullability)، طول و ترتیب ستون‌ها را شامل می‌شود. sys.columns برای بررسی ساختار ستون‌های یک جدول خاص، شناسایی انواع داده‌ها یا پیدا کردن ستون‌هایی با ویژگی‌های مشخص بسیار کاربردی است و به عنوان یک ابزار قدرتمند برای تجزیه و تحلیل ساختار دیتابیس و اعتبارسنجی طرح‌واره (schema validation) عمل می‌کند.


SELECT
    c.name AS ColumnName,
    t.name AS DataType,
    c.max_length AS MaxLength,
    c.precision AS Precision,
    c.scale AS Scale,
    c.is_nullable AS IsNullable
FROM
    sys.columns AS c
INNER JOIN
    sys.types AS t ON c.system_type_id = t.system_type_id
WHERE
    c.object_id = OBJECT_ID('YourTableName') -- Replace 'YourTableName' with an actual table name
ORDER BY
    c.column_id;

sys.system_columns

sys.system_columns عمدتاً برای دسترسی به اطلاعات ستون‌های موجود در جداول سیستمی (system tables) به کار می‌رود. این نما، مشابه sys.columns، جزئیات ستون‌ها را ارائه می‌دهد اما تمرکز آن بر روی اشیاء سیستمی داخلی SQL Server است. این ویو برای تجزیه و تحلیل عمیق ساختار داخلی SQL Server و درک چگونگی ذخیره‌سازی فراداده توسط سیستم بسیار مفید است، هرچند که کمتر مورد استفاده مستقیم توسعه‌دهندگان عمومی قرار می‌گیرد و بیشتر برای متخصصین پایگاه داده که نیاز به دسترسی به فراداده‌های سطح پایین دارند، کاربرد دارد.


SELECT
    sc.name AS SystemColumnName,
    st.name AS DataType,
    sc.max_length AS MaxLength,
    sc.is_nullable AS IsNullable
FROM
    sys.system_columns AS sc
INNER JOIN
    sys.types AS st ON sc.system_type_id = st.system_type_id
WHERE
    sc.object_id = OBJECT_ID('sys.objects') -- Example: Query columns of sys.objects system table
ORDER BY
    sc.column_id;

sys.all_columns

sys.all_columns یک نمای جامع است که اطلاعات ستون‌ها را برای هر دو نوع اشیاء، یعنی جداول و نماهای تعریف شده توسط کاربر و همچنین جداول و نماهای سیستمی، در یک جا ترکیب می‌کند. این نما معادل ترکیب نتایج sys.columns و sys.system_columns است و یک دید یکپارچه از تمام ستون‌های موجود در پایگاه داده ارائه می‌دهد. استفاده از sys.all_columns می‌تواند فرآیند کوئری‌نویسی برای فراداده را ساده‌تر کند، به خصوص زمانی که نیاز به بررسی ستون‌ها بدون تمایز بین اشیاء کاربر و سیستم باشد. این ویو، با ارائه یک دید کلی از تمام ستون‌های موجود در پایگاه داده، یک ابزار قدرتمند برای تحلیل و گزارش‌گیری فراداده به شمار می‌رود و برای کاوش‌های گسترده در ساختار دیتابیس بسیار کارآمد است.


SELECT
    ac.name AS ColumnName,
    OBJECT_NAME(ac.object_id) AS ObjectName,
    t.name AS DataType,
    ac.is_nullable AS IsNullable
FROM
    sys.all_columns AS ac
INNER JOIN
    sys.types AS t ON ac.system_type_id = t.system_type_id
WHERE
    OBJECT_NAME(ac.object_id) IN ('YourTableName', 'sys.objects') -- Example: Query columns for a user table and a system table
ORDER BY
    ObjectName, ac.column_id;
sys.all_columnssys.columnssys.system_columnssys.tables
Comments (0)
Add Comment