• 15 Nisan 2021 02:59

Sait ORHAN

Öğretmek için Öğrenin- Öğrenmek için Öğretin

Bir Tablo Üzerinde Tanımlı Index ve Foreign Keylerin Sorgulanması

BySait ORHAN

Ara 3, 2020

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.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

This site uses Akismet to reduce spam. Learn how your comment data is processed.