如何在.NET中获取外键信息
我正在尝试使用.NET如何在.NET中获取外键信息,.net,sql-server,sqlconnection,.net,Sql Server,Sqlconnection,我正在尝试使用.NETGetSchema方法检索SQL Server中某些表的元数据。 我可以获取列信息,如数据类型和大小,但当我尝试“ForeignKeys”时,它不会告诉我相关表的名称或相关列名。 下面是我的当前代码。 这可以通过GetSchema实现吗?如果没有,我将求助于对系统表或信息表使用SQL查询,不管它们被称为什么。 如果您不知道GetSchema答案,请随意建议一个好的SQL查询 using (SqlConnection connection = new SqlConnectio
GetSchema
方法检索SQL Server中某些表的元数据。我可以获取列信息,如数据类型和大小,但当我尝试“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);
}
请记住,外键关系可以由多个列组成。以下是我用于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对象在我的web主机上运行,我想我会使用SMO对象。我收到一个新错误,无法找到SqlClrProvider。我在本地计算机上找不到该dll,但SMO在本地计算机上工作。编辑:我找到了SqlClrProvider.dll,添加了引用,重新发布到我的web主机上,它运行得很好。使用SMO对象获取外键元数据解决了这个问题