我想要一种方法来确定给定数据库中的哪些列通过 PK/FK 关系连接。我可以通过以下方式返回给定表的 PK/FK 信息
SELECT *
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS cu
WHERE EXISTS (
SELECT tc.*
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS tc
WHERE tc.CONSTRAINT_CATALOG = 'MyDatabase'
AND tc.TABLE_NAME = 'MyTable'
/*AND tc.CONSTRAINT_TYPE = 'PRIMARY KEY'*/
AND tc.CONSTRAINT_NAME = cu.CONSTRAINT_NAME);
GO
Run Code Online (Sandbox Code Playgroud)
但是对于从这样的查询返回的 PK,我如何建立关联的 FK(假设有一个)?
我知道您还可以通过以下方式获取引用的表:
SELECT CONSTRAINT_NAME = name,
FOREIGN_SCHEMA = OBJECT_SCHEMA_NAME(parent_object_id),
FOREIGN_TABLE = OBJECT_NAME(parent_object_id),
REFERENCED_SCHEMA = OBJECT_SCHEMA_NAME(referenced_object_id),
REFERENCED_TABLE = OBJECT_NAME(referenced_object_id)
FROM sys.foreign_keys
WHERE OBJECT_NAME(referenced_object_id) = 'MyTable';
GO
Run Code Online (Sandbox Code Playgroud)
但我现在正在努力获得明确的列引用。
我正在为 QlikView 创建一个脚本生成器。要生成脚本,我需要约束和关联的链接。我需要任何给定列(如果有)的所有约束信息。
我想构建一个数据库类来保存给定数据库的所有信息。database.table.column.constraints
然后将使用该类结构来获取 PK/FK 上不同列之间的匹配。
很明显,有些列只有 FK,在这种情况下,我还想检索相应键的 PK 信息;有些将只有PK,然后我想要相反的。有些当然可以两者兼而有之。