Foreign Key tablolar üzerinde veri bütünlüğünü sağlayan yapılardan biridir. Aşağıdaki kodu çalıştırarak veri tabanında tanımlı olan foreign key listesi elde edilebilir.
select fk.name fkName,
t.name TableName,
pc.name ColumnName,
rt.name referencedTable,
rc.name referencedColumn,
fk.delete_referential_action_desc,
fk.update_referential_action_desc
from sys.foreign_keys fk
join sys.tables t on fk.parent_object_id = t.object_id
join sys.tables rt on fk.referenced_object_id = rt.object_id
join sys.foreign_key_columns fkc on fk.object_id = fkc.constraint_object_id
join sys.columns pc on pc.object_id = fkc.parent_object_id and pc.column_id = fkc.parent_column_id
join sys.columns rc on rc.object_id = fkc.referenced_object_id and rc.column_id = fkc.referenced_column_id
order by t.name
Kod içerisinde kullanılan tablolar aşağıdaki gibidir.
- sys.foreign_keys: Foreign Key listesi tutan tablo
- sys.tables: Veri tabanındaki tablo listesini tutan tablo
- sys.foreign_key_columns: Foreign Key’lerin referans alan ve alınan kolonların listesini tutan tablo
- sys.columns: Veri tabanındaki bütün kolonların listesini tutan tablo
Kodun video anlatımını aşağıdaki videodan izleyebilirsiniz.
Tablo üzerinde tanımlı indexleri listelemek için kullanılabilecek SQL kodu:
select
ROW_NUMBER() over(partition by i.object_id, i.index_id order by i.name) IndexColumnId,
t.name TableName,
i.name IndexName,
--c.name ColumnName,
frag.index_type_desc IndexType,
frag.avg_fragmentation_in_percent,
frag.alloc_unit_type_desc
from sys.tables t
join sys.indexes i on t.object_id = i.object_id
--join sys.index_columns ic on i.index_id = ic.index_id and ic.object_id = t.object_id
--join sys.columns c on c.object_id = t.object_id and ic.column_id = c.column_id
join sys.dm_db_index_physical_stats(DB_ID(), null, null, null, null) as frag on frag.object_id = t.object_id and frag.index_id = i.index_id
where t.type = 'U' and t.name like '%'
order by t.name
Bu kod sonucunda sorgulanan_tablo üzerinde tanımlı indexler döndürülecektir.