پیدا کردن تمام PrimaryKey های یک دیتابیس
گاهی وقت ها نیازه که ما لیست تمامی کلید های اصلی دیتابیس هامون رو و جداول اون ها رو داشته باشیم ، برای بدست آوردن تمام PrimaryKey های موجود در دیتابیس می توان از دستورات زیر استفاده کرد .
SELECT
KCU.TABLE_NAME AS Table_Name,
KCU.CONSTRAINT_NAME AS Constraint_Name,
KCU.COLUMN_NAME AS COLUMN_NAME
FROM
INFORMATION_SCHEMA.TABLE_CONSTRAINTS TC
JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE KCU
ON KCU.CONSTRAINT_SCHEMA = TC.CONSTRAINT_SCHEMA
AND KCU.CONSTRAINT_NAME = TC.CONSTRAINT_NAME
AND KCU.TABLE_SCHEMA = TC.TABLE_SCHEMA
AND KCU.TABLE_NAME = TC.TABLE_NAME
WHERE
TC.CONSTRAINT_TYPE = 'PRIMARY KEY'
ORDER BY
KCU.TABLE_SCHEMA, KCU.TABLE_NAME, KCU.CONSTRAINT_NAME
و یا می توان از اسکریپت زیر استفاده کرد :
SELECT SCHEMA_NAME(tab.schema_id) AS [Table_schema],
pk.[name] AS PrimaryKey_name,
SUBSTRING(column_names, 1, LEN(column_names)-1) AS [Tables_columns],
tab.[name] AS table_name
FROM sys.tables tab
INNER JOIN sys.indexes pk
ON tab.object_id = pk.object_id
AND pk.is_primary_key = 1
CROSS APPLY (SELECT col.[name] + ','
from sys.index_columns ic
inner join sys.columns col
on ic.object_id = col.object_id
and ic.column_id = col.column_id
where ic.object_id = tab.object_id
and ic.index_id = pk.index_id
order by col.column_id
for xml path ('') ) D (column_names)
order by schema_name(tab.schema_id),
pk.[name]
نتیجه خروجی اسکریپت های بالا مشابه عکس زیر می باشد :
برای پیدا کردن تمام کلیدهای اصلی (Primary Key) در یک دیتابیس، شما میتوانید به جدول “sys.objects” در دیتابیس مورد نظر مراجعه کنید و فیلتر بر روی کلیدهای اصلی اعمال کنید. در SQL Server، معمولاً کلیدهای اصلی به عنوان محدودیتهای اجباری (Constraints) در نظر گرفته میشوند.
دستور زیر نمونهای است که شما میتوانید از آن برای دریافت نام جداولی که کلید اصلی دارند، استفاده کنید:
SELECT name
FROM sys.objects
WHERE type = ‘U’ — فقط جداول را در نظر بگیرید
AND OBJECTPROPERTY(object_id, ‘IsPrimaryKey’) = 1;
این دستور تمام جداول را که کلید اصلی دارند، بر اساس نام جدول برگردانده و فیلتری را بر روی محدودیتهای اصلی اعمال میکند. مهم است به یاد داشته باشید که این دستور فقط کلیدهای اصلی اعمال شده را برمیگرداند و ممکن است دیگر انواع محدودیتها را در نظر نگیرد.
لطفاً توجه داشته باشید که نحوه دسترسی به متادیتا در دیتابیس میتواند در هر سیستم مدیریت پایگاه داده (DBMS) متفاوت باشد. مثلاً در Oracle، متادیتا در جداول “ALL_CONSTRAINTS” و “ALL_CONS_COLUMNS” ذخیره میشود. بنابراین، بسته به نوع DBMS که استفاده میکنید، دستورات و جداول مورد استفاده برای پیدا کردن کلیدهای اصلی ممکن است متفاوت باشد.
دیدگاه ها 2