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


نمایش جداول یک دیتابیس که دارای Primary Key هستند

نمایش جداول یک دیتابیس که دارای Primary Key هستند
در پست قبل نحوه لیست جداولی که فاقد Promary Key بودند را بررسی کردیم و حالا عکس این مورد را در این پست مورد بررسی قرار می دهیم. جداولی از دیتابیس که دارای Primary Key هستند را مشاهده خواهیم کرد.

نرم افزار سامانه مودیان راهکار



OBJECTPROPERTY() with sys.tables

در اولین گام، از تابع OBJECTPROPERTY هنگام کوئری روی View سیستمی sys.tables استفاده می شود. این تابع آرگومان TableHasPrimaryKey را می پذیرد. مقدار برابر با وجود کلید اصلی و 0 نشان از عدم وجود آن است(0 به معنی این است که هیچ جدولی دارای Primary Key از این دیتابیس نیست).

SELECT
SCHEMA_NAME(schema_id) AS [Schema],
name AS [Table]
FROM sys.tables
WHERE OBJECTPROPERTY(object_id, 'TableHasPrimaryKey') = 1
ORDER BY [Schema], [Table];

+----------+---------+
| Schema | Table |
|----------+---------|
| dbo | Albums |
| dbo | Artists |
| dbo | Country |
| dbo | Genres |
+----------+---------+

در این مثال ، پایگاه داده فعلی دارای چهار جدول با یک کلید اصلی است.

OBJECTPROPERTY() with INFORMATION_SCHEMA.TABLES

در این مثال هم دوباره از تابع OBJECTPROPERTY استفاده شده است ولی این بار کوئری روی View سیستمی INFORMATION_SCHEMA.TABLES اعمال می شود.

SELECT
TABLE_SCHEMA,
TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES WHERE OBJECTPROPERTY(OBJECT_ID(CONCAT(TABLE_SCHEMA, '.', TABLE_NAME)),'TableHasPrimaryKey') = 1 AND
TABLE_TYPE='BASE TABLE'
ORDER BY TABLE_SCHEMA, TABLE_NAME;

+----------------+--------------+
| TABLE_SCHEMA | TABLE_NAME |
|----------------+--------------|
| dbo | Albums |
| dbo | Artists |
| dbo | Country |
| dbo | Genres |
+----------------+--------------+

OBJECTPROPERTY() with sys.objects

در روش سوم هم از تابع OBJECTPROPERTY استفاده میشود ولی این بار به سراغ View سیستمی دیگری با نام sys.objects خواهیم رفت.

SELECT
SCHEMA_NAME(schema_id) AS [Schema],
name AS [Table]
FROM sys.objects
WHERE type = 'U'
AND OBJECTPROPERTY(OBJECT_ID(CONCAT(SCHEMA_NAME(schema_id), '.', name)), 'TableHasPrimaryKey') = 1
ORDER BY [Schema], [Table]

+----------+---------+
| Schema | Table |
|----------+---------|
| dbo | Albums |
| dbo | Artists |
| dbo | Country |
| dbo | Genres |
+----------+---------+

INFORMATION_SCHEMA.TABLE_CONSTRAINTS

View سیستمی INFORMATION_SCHEMA.TABLE_CONSTRAINTS هم می تواند لیست از جداولی که در یک دیتابیس دارای Primary Key هستند را نمایش دهد. فیلتر خود را طوری روی این View اعمال می کنیم که فقط جداولی که دارای کلید اصلی هستند در خروجی نمایش داده شود که برای اینکار از فیلتر CONSTRAINT_TYPE = PRIMARY KEY استفاده می شود.

SELECT
CONSTRAINT_SCHEMA,
TABLE_NAME
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE CONSTRAINT_TYPE = 'PRIMARY KEY';

+---------------------+--------------+
| CONSTRAINT_SCHEMA | TABLE_NAME |
|---------------------+--------------|
| dbo | Artists |
| dbo | Genres |
| dbo | Albums |
| dbo | Country |
+---------------------+--------------+

این View، constraint name را هم بر میگرداند پس در صورت لزوم حتی میت وانید نام ستون مربوط به constraint name را هم در کوئری خود قید کنید.

SELECT
CONSTRAINT_SCHEMA,
TABLE_NAME,
CONSTRAINT_NAME
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE CONSTRAINT_TYPE = 'PRIMARY KEY';

+---------------------+--------------+-------------------------------+
| CONSTRAINT_SCHEMA | TABLE_NAME | CONSTRAINT_NAME |
|---------------------+--------------+-------------------------------|
| dbo | Artists | PK__Artists__25706B50FCD918B1 |
| dbo | Genres | PK__Genres__0385057E88BB96F8 |
| dbo | Albums | PK__Albums__97B4BE379FC780BD |
| dbo | Country | PK__Country__10D1609F97ADEC31 |
+---------------------+--------------+-------------------------------+

sys.key_constraints

به منظور نمایش جداول دارای کلید اصلی می توانید View سیستمی sys.key_constraints را بکار گیرید و فیلتر را بصورت WHERE type =PK درج کنید تا جداول Primary Key دار نمایش داده شوند.
SELECT
SCHEMA_NAME(schema_id) AS [Schema],
OBJECT_NAME(parent_object_id) AS [Table]
FROM sys.key_constraints
WHERE type = 'PK';

+----------+---------+
| Schema | Table |
|----------+---------|
| dbo | Artists |
| dbo | Genres |
| dbo | Albums |
| dbo | Country |
+----------+---------+

این View هم ستونی که نام primary key ها در آن ثبت شده باشد را دارد که در صورت لزوم می توانید آن ستون را هم در کوئری قید کنید:

SELECT
SCHEMA_NAME(schema_id) AS [Schema],
OBJECT_NAME(parent_object_id) AS [Table],
name
FROM sys.key_constraints
WHERE type = 'PK';

+----------+---------+-------------------------------+
| Schema | Table | name |
|----------+---------+-------------------------------|
| dbo | Artists | PK__Artists__25706B50FCD918B1 |
| dbo | Genres | PK__Genres__0385057E88BB96F8 |
| dbo | Albums | PK__Albums__97B4BE379FC780BD |
| dbo | Country | PK__Country__10D1609F97ADEC31 |
+----------+---------+-------------------------------+

sys.objects

View ی سیستمی sys.objects یکی از موارد محبوب برای بازگرداندن اطلاعات در مورد اشیاء دارای schema ، از جمله کلیدهای اصلی است.

SELECT
SCHEMA_NAME(schema_id) AS [Schema],
OBJECT_NAME(parent_object_id) AS [Table]
FROM sys.objects
WHERE type = 'PK';

+----------+---------+
| Schema | Table |
|----------+---------|
| dbo | Artists |
| dbo | Genres |
| dbo | Albums |
| dbo | Country |
+----------+---------+

اگر به ستون نام های primary key نیاز دارید، مانند مثال های قبلی می توانید name را در کوئری فوق قید کنید.

SELECT
SCHEMA_NAME(schema_id) AS [Schema],
OBJECT_NAME(parent_object_id) AS [Table],
name
FROM sys.objects
WHERE type = 'PK';

+----------+---------+-------------------------------+
| Schema | Table | name |
|----------+---------+-------------------------------|
| dbo | Artists | PK__Artists__25706B50FCD918B1 |
| dbo | Genres | PK__Genres__0385057E88BB96F8 |
| dbo | Albums | PK__Albums__97B4BE379FC780BD |
| dbo | Country | PK__Country__10D1609F97ADEC31 |
+----------+---------+-------------------------------+


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

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

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


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