programing

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

lastmoon 2023. 7. 1. 09:20
반응형

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

SQL 서버 데이터베이스에서 모든 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 문이 이러한 규칙을 고수하는 경우 해당 FK 참조를 쿼리할 수 있습니다.

그러나 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%' 
select * from sys.objects where type = 'F'

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

반응형