توسط دستور زیر اسامی میتوان لیست تمامی جداول به همراه نام Primary Key Constraint آنها را بدست آورد. توسط خروجی این دستور میتوان جداول فاقد Primary Key را شناسایی کرد.
[sql]
select schema_name(tab.schema_id) as [schema_name],
tab.[name] as table_name,
pk.[name] as pk_name,
substring(column_names, 1, len(column_names)-1) as [columns]
from sys.tables tab
left outer 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),
tab.[name]
[/sql]
- Schema_Name: نام Schema
- Table_Name: نام جدول
- Pk_Name: نامِ Constraint مربوط به PK
- Columns: لیست اسامی ستونهای تشکیل دهنده pk
یک نمونه از اجرای دستور بالا:
همانطور که مشاهده میشود جداولی که دو ستون PK_Name و Columns آنها فاقد مقدار باشد. جداول فاقد PK میباشند.
دانلود این اسکریپت: