Вы можете удалить все триггеры непосредственно удалить их из системной таблицы, например, так:
delete from rdb$triggers
where (rdb$system_flag = 0 or rdb$system_flag is null);
Обратите внимание, что обычный способ использования drop trigger
, безусловно, предпочтительнее, но это может быть сделано.
Вы также можете отказаться от ограничений, выполнив инструкции DDL, но для перечисления ограничений и их сброса в сценарий SQL вам понадобится функциональность execute block
, которой не обладает Firebird 1.5.
Существуют аналогичные утверждения для удаления других объектов базы данных, но фактически их выполнение может быть намного сложнее из-за зависимостей между объектами. Вы не можете удалить какой-либо объект, если от него зависит другой объект. Это может стать очень сложным из-за круговых ссылок, где два (или даже больше) объекта зависят друг от друга, образуя цикл, поэтому ни один из них не может быть отброшен первым.
Путь вокруг этого - разбить одну из зависимостей. Процедура, например, которая имеет зависимости от других объектов, может быть изменена, чтобы иметь пустое тело, после чего она больше не зависит от этих других объектов, поэтому они могут быть затем удалены. Удаление внешних ключей - это еще один способ устранения зависимостей между таблицами.
Я не знаю ни одного инструмента, реализующего такое частичное удаление объектов базы данных, ваш прецедент - это ИМО, далекий от общего. Тем не менее, вы можете взглянуть на FlameRobin source code, который имеет определенное количество обнаружения зависимостей в коде, который используется для создания сценариев DDL или операторов модификации для объектов базы данных. Вооружившись этой информацией, вы можете написать свой собственный инструмент для этого.
Если это одно время, этого может быть достаточно, чтобы сделать это вручную. Для этого используйте любой инструмент управления Firebird по вашему выбору.
K.: У вас есть больше этих предложений «выбрать ..»? Выбор всех видов ограничений f.i. ? – Edelcom