gpt4 book ai didi

firebird - 如何查找哪个表列对应于 Firebird 数据库中的约束?

转载 作者:行者123 更新时间:2023-12-03 09:24:07 30 4
gpt4 key购买 nike

我有一个旧版 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 列作为“ session ”,我假设它是 session 表。但我现在的问题是:如何找出该约束属于 session 表中的哪一列?

最佳答案

我最初认为无法推断某些约束的列名,但事实证明 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 - 如何查找哪个表列对应于 Firebird 数据库中的约束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25235525/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com