SQL Script to find Foreign keys to a specific table?

后端 未结 2 895
忘掉有多难
忘掉有多难 2020-12-05 18:44

Is there a query that will get me foreign keys directed at a specific table column? For example, say I had these three tables:

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


        
相关标签:
2条回答
  • 2020-12-05 19:23

    Courtesy of Pinal Dave:

    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
    
    0 讨论(0)
  • 2020-12-05 19:34

    Added dynamic drop and create on dbo scheme.

    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
    
    0 讨论(0)
提交回复
热议问题