3

我想找到我的数据库中的所有引用表有一个外键指向一个特定的引用表。有没有可以运行的查询来执行此操作?如何查找所有外键?

不确定问题是否令人困惑。让我知道如果是这样,我可以尝试更详细地解释它。

回答

2

下面的查询或修改tehreof会做 - 在SQL Server 还可以提供目录和架构信息

select tab1.TABLE_NAME from 
INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS as ref inner join 
INFORMATION_SCHEMA.TABLE_CONSTRAINTS as prim 
on ref.UNIQUE_CONSTRAINT_NAME=prim.CONSTRAINT_NAME 
and ref.UNIQUE_CONSTRAINT_CATALOG=prim.CONSTRAINT_CATALOG 
and ref.UNIQUE_CONSTRAINT_SCHEMA=prim.CONSTRAINT_SCHEMA 
--and prim.CONSTRAINT_TYPE in('PRIMARY KEY','UNIQUE') 
inner join INFORMATION_SCHEMA.TABLE_CONSTRAINTS tab1 on 
ref.CONSTRAINT_NAME=tab1.CONSTRAINT_NAME 
and ref.CONSTRAINT_CATALOG=tab1.CONSTRAINT_CATALOG 
and ref.CONSTRAINT_SCHEMA=tab1.CONSTRAINT_SCHEMA 
where prim.TABLE_NAME='YourTablename' 
0

看一看元数据:

SELECT * FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS 
SELECT * FROM INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE 
SELECT * FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS 
SELECT * FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE 
0
SELECT DISTINCT 
      ParentSchema.name  ParentSchema 
      ,ParentTable.name  ParentTable 
      ,ChildSchema.name  ChildSchema 
      ,ChildTable.name  ChildTable 
    FROM sys.foreign_keys  Foreign_Keys 
    JOIN sys.objects   ParentTable  ON Foreign_Keys.parent_object_id  = ParentTable.object_id 
    JOIN sys.schemas   ParentSchema ON ParentTable.schema_id    = ParentSchema.schema_id 
    JOIN sys.objects   ChildTable  ON Foreign_Keys.referenced_object_id = ChildTable.object_id 
    JOIN sys.schemas   ChildSchema  ON ChildTable.schema_id    = ChildSchema.schema_id 
    WHERE ParentSchema.name = '??????' 
     AND ParentTable.name = '??????' 
2

我前段时间有类似的问题。以下是我使用Sql Server SMO编写的脚本:

public static string GetForeignKeyScript() 
    { 
     SqlConnection conn = new System.Data.SqlClient.SqlConnection("SOME_CONNECTION_STRING"); 
     Server server = new Server(new ServerConnection(conn)); 
     Database db = server.Databases["SOME_DATABASE"]; 
     Table Roles = db.Tables["SOME_TABLE"]; 

     var sb = new StringBuilder(); 

     foreach (Table table in db.Tables) 
      foreach (ForeignKey fk in table.ForeignKeys) 
        foreach (string s in fk.Script()) 
         sb.AppendLine(s); 

     return sb.ToString(); 
    } 

这将输出一个包含用于创建外键的脚本的字符串。

编辑代码以删除相当特定于我的项目的内容(例如,我只对以某个字符串结尾的表感兴趣)