Skenario:
Anda bekerja sebagai Pengembang SQL Server, Anda diminta untuk memberikan kueri yang akan mengembalikan semua tabel induk, tabel referensi, Batasan Kunci Asing, dan Kolom yang digunakan dalam definisi Batasan Kunci Asing.Solusi:
Kita dapat menggunakan tampilan sistem untuk mengumpulkan informasi ini. Dalam kueri kami di bawah ini, kami akan menggunakan tigatampilan sistem
sys.foreign_keys
sys.foreign_key_columns
sys.columns
untuk menjawab Permintaan. Karena kita dapat memiliki kolom kunci utama komposit yang digunakan dalam Batasan Kunci Asing, saya telah menggunakan FOR XML Path untuk menggabungkan baris menjadi kolom sehingga dapat memberikan daftar kolom dalam satu baris.
;With CTE_FK AS ( SELECT Schema_Name(Schema_id) as TableSchemaName, object_name(FK.parent_object_id) ParentTableName, object_name(FK.referenced_object_id) ReferenceTableName, FK.name AS ForeignKeyConstraintName,c.name as ReferencedColumnList, cf.name as ParentColumnName FROM sys.foreign_keys AS FK INNER JOIN sys.foreign_key_columns AS FKC ON FK.OBJECT_ID = FKC.constraint_object_id INNER JOIN sys.columns c on c.OBJECT_ID = FKC.referenced_object_id AND c.column_id = FKC.referenced_column_id INNER JOIN sys.columns cf on cf.OBJECT_ID = FKC.parent_object_id AND cf.column_id = FKC.parent_column_id ) Select TableSchemaName, ParentTableName, ReferenceTableName, ForeignKeyConstraintName,stuff(( Select ','+ParentColumnName from CTE_FK i where i.ForeignKeyConstraintName=o.ForeignKeyConstraintName and i.TableSchemaName=o.TableSchemaName and i.ParentTableName=o.ParentTableName and i.ReferenceTableName=o.ReferenceTableName for xml path('')), 1, 1, '') ParentColumnList ,stuff(( Select ','+ReferencedColumnList from CTE_FK i where i.ForeignKeyConstraintName=o.ForeignKeyConstraintName and i.TableSchemaName=o.TableSchemaName and i.ParentTableName=o.ParentTableName and i.ReferenceTableName=o.ReferenceTableName for xml path('')), 1, 1, '') RefColumnList from CTE_FK o group by tableSchemaName, ParentTableName, ReferenceTableName, ForeignKeyConstraintName
Saya mengeksekusi skrip di atas pada salah satu database saya dan ini adalah output dengan Nama Skema, Nama Tabel Induk, Nama Tabel Referensi, Nama Batasan Kunci Asing, Daftar Kolom Induk dan Daftar Kolom Referensi yang digunakan dalam Batasan.
Cara mendapatkan Tabel Induk, Tabel Referensi, Nama Batasan Kunci Asing, daftar Kolom di SQL Server |
Video Demo :Cara Mendapatkan Tabel Kunci Utama, Tabel Kunci Asing dan Nama Batasan di SQL Server