Development Tip

데이터베이스의 모든 외래 키를 나열 할 수 있습니까?

yourdevel 2020. 12. 7. 21:01
반응형

데이터베이스의 모든 외래 키를 나열 할 수 있습니까?


sqlserver 데이터베이스의 모든 FK를 어떻게 나열합니까?


이 문장을 사용하는데 꽤 잘 작동하는 것 같습니다.

SELECT RC.CONSTRAINT_NAME FK_Name
, KF.TABLE_SCHEMA FK_Schema
, KF.TABLE_NAME FK_Table
, KF.COLUMN_NAME FK_Column
, RC.UNIQUE_CONSTRAINT_NAME PK_Name
, KP.TABLE_SCHEMA PK_Schema
, KP.TABLE_NAME PK_Table
, KP.COLUMN_NAME PK_Column
, RC.MATCH_OPTION MatchOption
, RC.UPDATE_RULE UpdateRule
, RC.DELETE_RULE DeleteRule
FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS RC
JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE KF ON RC.CONSTRAINT_NAME = KF.CONSTRAINT_NAME
JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE KP ON RC.UNIQUE_CONSTRAINT_NAME = KP.CONSTRAINT_NAME

이론적으로 이것은 어렵습니다. 관계형 모델을 사용하면 모든 필드가 다른 필드와 관련 될 수 있습니다. 실제로 사용되는 것은 사용할 수있는 모든 가능한 SELECT 문에 의해 정의됩니다.

실제로는 FK 정의가 포함 된 테이블 수에 따라 다릅니다. 누군가가 모든 FK 참조를 신중하게 정의하고 SELECT 문이 이러한 규칙을 고수한다면 쿼리 할 수 ​​있습니다.

그러나 SELECT 문은 무엇이든 조인 할 수 있기 때문에 모든 SELECT 문 이없는 경우 모든 FK 가 있다는 보장이 없습니다 .


편집 .

참조 http://www.lostechies.com/blogs/jimmy_bogard/archive/2008/11/26/viewing-all-foreign-key-constraints-in-sql-server.aspx를

SELECT f.name AS ForeignKey, 
   OBJECT_NAME(f.parent_object_id) AS TableName, 
   COL_NAME(fc.parent_object_id, fc.parent_column_id) AS ColumnName, 
   OBJECT_NAME (f.referenced_object_id) AS ReferenceTableName, 
   COL_NAME(fc.referenced_object_id, fc.referenced_column_id) AS ReferenceColumnName 
FROM sys.foreign_keys AS f 
INNER JOIN sys.foreign_key_columns AS fc 
   ON f.OBJECT_ID = fc.constraint_object_id

당신을 위해 일할 수 있습니다.


http://technet.microsoft.com/en-us/library/ms189807.aspx를 사용합니다.

SELECT * FROM sys.foreign_keys

SQL Server 2005 이상을 사용 중이고 FK 이름 목록을 확인하려는 경우입니다.

그러나 당신은 아마도 관련된 테이블에 대해 더 많이 알고 싶을 것입니다. 당신은 대답이 유용한 곳입니다.


더 많은 정보를 제공하는 방법이 있습니다.

SELECT DISTINCT PARENT_TABLE = 
            RIGHT(Replace(TC.constraint_name, 'FK_', ''), 
            Len(Replace(TC.constraint_name, 'FK_', '')) - Charindex('_', Replace(TC.constraint_name, 'FK_', ''))), 
            CHILD_TABLE = TC.table_name, 
            CU.column_name, 
            TC.constraint_name, 
            TC.constraint_type 
FROM information_schema.table_constraints TC 
INNER JOIN information_schema.constraint_column_usage CU 
            ON TC.constraint_name = CU.constraint_name 
WHERE  TC.constraint_type LIKE '%foreign' 
            OR TC.constraint_type LIKE '%foreign%' 
            OR TC.constraint_type LIKE 'foreign%' 

참고 URL : https://stackoverflow.com/questions/1229968/is-it-possible-to-list-all-foreign-keys-in-a-database

반응형