Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Cách lấy Bảng cha, Bảng tham chiếu, Tên và cột ràng buộc khóa ngoại trong SQL Server - Hướng dẫn SQL Server / TSQL Phần 71

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ống


sys.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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Công cụ quản lý SQL Server 2017

  2. Không thể tìm thấy dbo cột hoặc hàm do người dùng xác định hoặc dbo tổng hợp .plitfn hoặc tên không rõ ràng

  3. không có sqljdbc_auth trong java.library.path

  4. Tạo trường hợp cho dịch vụ SQL Server thông thường

  5. Cách tăng tốc độ chèn hàng loạt vào MS SQL Server bằng pyodbc