如何在 .NET 中获取外键信息

How To Get Foreign Key Information In .NET

我正在尝试使用 .NET GetSchema 方法检索有关 SQL 服务器中某些 table 的元数据。
我可以取回列信息,例如数据类型和大小,但是当我尝试 "ForeignKeys" 时,它没有告诉我相关 table 的名称或相关列名称。
下面是我当前的代码。
这可以用 GetSchema 来完成吗?如果没有,我将求助于在系统 tables 或信息 tables 上使用 SQL 查询,无论它们叫​​什么。
如果您不知道 GetSchema 答案,请随时提出一个好的 SQL 查询。

using (SqlConnection connection = new SqlConnection(connectionString))
{
    connection.Open();
    string[] restrictions = new string[4];
    restrictions[1] = schemaName;
    restrictions[2] = tableName;
    DataTable schema = connection.GetSchema("ForeignKeys", restrictions);
}

请记住,外键关系可以由多个列组成。这是我用于 FK 列映射的查询:

select 
        IS_KCU1.CONSTRAINT_SCHEMA,
        IS_KCU1.CONSTRAINT_NAME,
        IS_KCU1.TABLE_SCHEMA FK_TABLE_SCHEMA,
        IS_KCU1.TABLE_NAME FK_TABLE_NAME,
        IS_KCU1.COLUMN_NAME FK_COLUMN_NAME,
        IS_KCU2.TABLE_SCHEMA REFERENCED_TABLE_SCHEMA,
        IS_KCU2.TABLE_NAME REFERENCED_TABLE_NAME,
        IS_KCU2.COLUMN_NAME REFERENCED_COLUMN_NAME
        from INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS IS_RC 

        inner join INFORMATION_SCHEMA.KEY_COLUMN_USAGE IS_KCU1 
        on IS_KCU1.CONSTRAINT_CATALOG = IS_RC.CONSTRAINT_CATALOG  
        and IS_KCU1.CONSTRAINT_SCHEMA = IS_RC.CONSTRAINT_SCHEMA 
        and IS_KCU1.CONSTRAINT_NAME = IS_RC.CONSTRAINT_NAME 

        inner join INFORMATION_SCHEMA.KEY_COLUMN_USAGE IS_KCU2 
        on IS_KCU2.CONSTRAINT_CATALOG = IS_RC.UNIQUE_CONSTRAINT_CATALOG  
        and IS_KCU2.CONSTRAINT_SCHEMA = IS_RC.UNIQUE_CONSTRAINT_SCHEMA 
        and IS_KCU2.CONSTRAINT_NAME = IS_RC.UNIQUE_CONSTRAINT_NAME 
        and IS_KCU2.ORDINAL_POSITION = IS_KCU1.ORDINAL_POSITION

我想我会使用 SMO 对象,如果我可以在我的网络主机上 运行 获取它们的话。我收到无法找到 SqlClrProvider 的新错误。我在我的本地机器上找不到那个 dll,但 SMO 在我的本地机器上工作。编辑:我找到了 SqlClrProvider.dll,添加了参考,重新发布到我的虚拟主机,它 运行 完美。使用 SMO 对象获取外键元数据的问题已解决。