我有一个传统的Firebird(版本2.5.2)数据库,并使用FlameRobin(版本0.0.2.1851)来检查它。
我在RDB $ RELATION_CONSTRAINTS表上运行了以下查询,以搜索名为' INTEG_172':
的约束SELECT *
FROM RDB$RELATION_CONSTRAINTS a
WHERE RDB$CONSTRAINT_NAME = 'INTEG_172'
该查询将RDB $ RELATION_NAME列返回为“会议”列。我假设的是会议桌。但我现在的问题是:如何找出此约束所属的会议表中的哪一列?
答案 0 :(得分:2)
我最初认为无法推断某些约束的列名,但事实证明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'
答案 1 :(得分:1)
希望这就是你要找的......
SELECT RDB$INDEX_SEGMENTS.RDB$FIELD_NAME
FROM RDB$RELATION_CONSTRAINTS
INNER JOIN RDB$INDEX_SEGMENTS
on ( RDB$INDEX_SEGMENTS.RDB$INDEX_NAME = RDB$RELATION_CONSTRAINTS.RDB$INDEX_NAME )
WHERE RDB$RELATION_CONSTRAINTS.RDB$CONSTRAINT_NAME = 'INTEG_172'
答案 2 :(得分:0)
我只是这样做:
显示表会议; (通过sql)
并阅读约束定义