我正在尝试使用.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);
}
答案 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对象解决问题以获取外键元数据。