Tình huống:
Bạn đang làm việc với tư cách là Nhà phát triển SQL Server, bạn được yêu cầu cung cấp truy vấn sẽ trả về tất cả các bảng mẹ, bảng tham chiếu, Ràng buộc Khoá ngoại và Cột được sử dụng trong định nghĩa Ràng buộc Khoá ngoại.Giải pháp:
Chúng tôi có thể sử dụng chế độ xem hệ thống để thu thập thông tin này. Trong truy vấn dưới đây, chúng tôi sẽ sử dụng ba chế độ xem hệ thốngsys.foreign_keys
sys.foreign_key_columns
sys.columns
để trả lời yêu cầu. Vì chúng ta có thể có các cột khóa chính tổng hợp được sử dụng trong Ràng buộc khóa ngoài, tôi đã sử dụng Đường dẫn FOR XML để nối các hàng thành cột để có thể cung cấp danh sách các cột trong một hàng.
;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
Tôi đã thực thi tập lệnh trên trên một trong cơ sở dữ liệu của mình và đây là kết quả có Tên lược đồ, Tên bảng chính, Tên bảng được tham chiếu, Tên ràng buộc khóa ngoại, Danh sách cột mẹ và Danh sách cột tham chiếu được sử dụng trong Ràng buộc.
Cách lấy Bảng chính, Bảng tham chiếu, Tên ràng buộc khóa ngoại, danh sách cột trong SQL Server |
Video Demo:Cách lấy Bảng khóa chính, Bảng khóa ngoài và Tên ràng buộc trong SQL Server