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(); 
    } 

這將輸出一個包含用於創建外鍵的腳本的字符串。

編輯代碼以刪除相當特定於我的項目的內容(例如,我只對以某個字符串結尾的表感興趣)