如何在Firebird数据库中查找与约束对应的表列? [英] How to find which table column corresponds to a constraint in a Firebird database?
本文介绍了如何在Firebird数据库中查找与约束对应的表列?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个旧版Firebird(版本2.5.2)数据库,正在使用FlameRobin(版本0.0.2.1851)检查它。
我在RDB$Relationship_Constraints表上运行了以下查询,以搜索名为‘INTEG_172’的约束:
SELECT *
FROM RDB$RELATION_CONSTRAINTS a
WHERE RDB$CONSTRAINT_NAME = 'INTEG_172'
该查询将RDB$Relationship_NAME列返回为‘Meeting’,我假设它是Meeting表。但我现在的问题是:我如何找出此约束属于会议表中的哪一列?
推荐答案
我最初以为无法推断某些约束的列名,但事实证明NOT NULL
约束实际上是作为CHECK
约束实现的。
我在his answer中对Ed Mendez的查询进行了扩展,使其也包括了检查约束,它应该提供所有约束以及它们使用的表和列(除了目标表+外键的列,因为我太懒而不包括RDB$REF_CONSTRAINTS
):
SELECT RDB$CONSTRAINT_NAME, RDB$CONSTRAINT_TYPE,
RDB$RELATION_NAME, RDB$FIELD_NAME
FROM (
SELECT REL_CONS.RDB$CONSTRAINT_NAME, REL_CONS.RDB$CONSTRAINT_TYPE,
REL_CONS.RDB$RELATION_NAME, ISEG.RDB$FIELD_NAME
FROM RDB$RELATION_CONSTRAINTS REL_CONS
INNER JOIN RDB$INDEX_SEGMENTS ISEG
ON ISEG.RDB$INDEX_NAME = REL_CONS.RDB$INDEX_NAME
UNION ALL
SELECT REL_CONS.RDB$CONSTRAINT_NAME, REL_CONS.RDB$CONSTRAINT_TYPE,
REL_CONS.RDB$RELATION_NAME, CH_CONS.RDB$TRIGGER_NAME
FROM RDB$RELATION_CONSTRAINTS REL_CONS
INNER JOIN RDB$CHECK_CONSTRAINTS CH_CONS
ON CH_CONS.RDB$CONSTRAINT_NAME = REL_CONS.RDB$CONSTRAINT_NAME
) a
WHERE a.RDB$CONSTRAINT_NAME = 'INTEG_172'
这篇关于如何在Firebird数据库中查找与约束对应的表列?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文