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

时间:2016-06-30 14:26:12

标签: .net sql-server sqlconnection

我正在尝试使用.NET GetSchema方法检索有关SQL Server中某些表的元数据 我可以找回Columns信息,比如数据类型和大小,但是当我尝试“ForeignKeys”时,它不会告诉我相关表的名称或相关的列名。
以下是我目前的代码 这可以用GetSchema完成吗?如果没有,我会在系统表或信息表上使用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);
}

2 个答案:

答案 0 :(得分:0)

请记住,外键关系可以由多个列组成。这是我用于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

答案 1 :(得分:0)

我想如果我能让他们在我的网络主机上运行,​​我将使用SMO对象。我收到一个无法找到SqlClrProvider的新错误。我在本地计算机上找不到该DLL,但SMO在我的本地计算机上运行。编辑:我找到了SqlClrProvider.dll,添加了引用,重新发布到我的网站主机,它运行得很好。使用SMO对象解决问题以获取外键元数据。