次のように、システムテーブルからトリガーを直接削除することで、すべてのトリガーを削除できます。
delete from rdb$triggers
where (rdb$system_flag = 0 or rdb$system_flag is null);
通常の使用方法drop trigger
が確かに望ましいことに注意してください、しかしそれはすることができます。
DDLステートメントを実行して制約を削除することもできますが、制約を列挙してSQLスクリプトに削除するには、execute block
Firebird1.5にはない機能が必要になります。
他のデータベースオブジェクトを削除するための同様のステートメントがありますが、オブジェクト間の依存関係のため、実際にこれらを正常に実行することははるかに難しい場合があります。別のオブジェクトがそれに依存している限り、オブジェクトをドロップすることはできません。これは、2つ(またはそれ以上)のオブジェクトが相互に依存してサイクルを形成する循環参照のために非常に扱いにくい場合があります。そのため、最初にドロップされる可能性のあるオブジェクトは1つではありません。
これを回避する方法は、依存関係の1つを壊すことです。たとえば、他のオブジェクトに依存しているプロシージャは、本体が空になるように変更できます。その後、他のオブジェクトに依存しなくなるため、削除される可能性があります。外部キーを削除することは、テーブル間の依存関係を排除するもう1つの方法です。
データベースオブジェクトのそのような部分的な削除を実装するツールを私は知りません、あなたのユースケースは一般的とはほど遠いIMOです。ただし、データベースオブジェクトのDDLスクリプトまたは変更ステートメントを作成するために使用されるコードにある程度の依存関係が検出されているFlameRobinソースコードを見ることができます。その情報で武装して、あなたはそれをするためにあなた自身のツールを書くことができました。
ただし、これが1回限りの場合は、手動で行うだけで十分な場合があります。そのために、任意のFirebird管理ツールを使用してください。