如何在Firebird数据库中查找与约束对应的表列? [英] How to find which table column corresponds to a constraint in a Firebird database?

查看:15
本文介绍了如何在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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆