您可以查询系统表 SYS.SYSCONSTRAINTS、SYS.SYSTABLES 和 SYS.SYSSCHEMAS 以获取给定架构的所有约束名称和相关表。
首先,简单介绍一下这些表(来自Re: Derby 中的系统表):
SYSTABLES 数据库中的每个表都有一行。它的主键是 TABLEID,其中包含系统生成的值。SCHEMAID 是一个外键列,它引用 SYSSCHEMAS。
SYSSCHEMAS 数据库中的每个架构都有一行。它的主键是 SCHEMAID。
...
SYSCONSTRAINTS 数据库中的每个约束(主要约束、唯一约束、外部约束和检查约束)都有一行。它的主键是 CONSTRAINTID,它是系统生成的值。TABLEID 列是引用 SYSTABLES.TABLEID 的外键。SCHEMAID 列是引用 SYSSCHEMAS.SCHEMAID 的外键。
因此您可以使用以下查询:
SELECT
C.CONSTRAINTNAME,
T.TABLENAME
FROM
SYS.SYSCONSTRAINTS C,
SYS.SYSSCHEMAS S,
SYS.SYSTABLES T
WHERE
C.SCHEMAID = S.SCHEMAID
AND
C.TABLEID = T.TABLEID
AND
S.SCHEMANAME = 'MYSCHEMA';
Run Code Online (Sandbox Code Playgroud)
然后循环并构建相应的 ALTER TABLE DROP CONSTRAINT 语句。