복붙노트

[SQL] 스크립트 SQL은 특정 테이블에 대한 외부 키를 찾는 방법은?

SQL

스크립트 SQL은 특정 테이블에 대한 외부 키를 찾는 방법은?

나에게 특정 테이블 컬럼에 지시 외래 키를 얻을 것이다 쿼리가 있습니까? 예를 들어, 나는이 세 개의 테이블을 가지고 말 :

__________
|Table A |
----------
|Id      |
----------

___________
|Table B  |
-----------
|Id       |
|TableAId | (Foreign Key to TableA.Id)
-----------

___________
|Table C  |
-----------
|Id       |
|TableAId | (Foreign Key to TableA.Id)
-----------

"표 B : TableAId"나는 "TableAId 표 C"를 반환 "TableA.Id에서 직접 선택 * 외래 키"의 라인을 따라 하나의 질의를 필요로한다. 나는 INFORMATION_SCHEMA 시스템 뷰의 일부를 검색하고있어, 나는 쉽게 외래 키가 개별적으로 표 A, 또는 표 B에 속한 볼 수있는 것처럼 보이지만 그것이 말하는 어디 찾을 수 없습니다 "표 C는에 외부 키를 가지고 구체적으로는 표 A ". 내가 쿼리의 특성을 알아낼 수, 난 그냥 (또는 내가 그들을 왜곡하고 있습니다)을 찾고 있어요 견해를 찾을 수 없습니다. 어떤 도움을 주시면 감사하겠습니다.

해결법

  1. ==============================

    1.PINAL 데이브의 의례 :

    PINAL 데이브의 의례 :

    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
    
  2. ==============================

    2.동적 드롭을 추가하고 DBO 방식에 만듭니다.

    동적 드롭을 추가하고 DBO 방식에 만듭니다.

    DECLARE @l varchar(1) = char(13);
    DECLARE @referenced_object_id varchar(MAX) = 'Replace_With_PK_Table_Name';
    
    SELECT 
        fk.name AS ForeignKey,
        OBJECT_NAME(fk.parent_object_id) AS TableName,
        COL_NAME(fkc.parent_object_id,
        fkc.parent_column_id) AS ColumnName,
        OBJECT_NAME (fk.referenced_object_id) AS ReferenceTableName,
        COL_NAME(fkc.referenced_object_id,
        fkc.referenced_column_id) AS ReferenceColumnName,
        'ALTER TABLE [dbo].['+OBJECT_NAME(fk.parent_object_id)+'] DROP CONSTRAINT ['+fk.name+'];' DropFK,
        'ALTER TABLE [dbo].['+OBJECT_NAME(fk.parent_object_id)+']  WITH NOCHECK ADD  CONSTRAINT ['+fk.name+'] FOREIGN KEY(['+COL_NAME(fkc.referenced_object_id,
        fkc.referenced_column_id)+'])'+ @l +
        ' REFERENCES [dbo].['+OBJECT_NAME(fk.referenced_object_id)+'] (['+COL_NAME(fkc.referenced_object_id,
        fkc.referenced_column_id)+'])'+ @l +
        ' ON UPDATE CASCADE'+ @l +
        ' ON DELETE CASCADE;'+ @l +
        'ALTER TABLE [dbo].['+OBJECT_NAME(fk.parent_object_id)+'] CHECK CONSTRAINT ['+fk.name+'];' CreateFK
    FROM 
        sys.foreign_keys AS fk
        INNER JOIN sys.foreign_key_columns AS fkc ON fk.OBJECT_ID = fkc.constraint_object_id
        WHERE OBJECT_NAME(fk.referenced_object_id)=@referenced_object_id
    
  3. from https://stackoverflow.com/questions/7853187/sql-script-to-find-foreign-keys-to-a-specific-table by cc-by-sa and MIT license