Как удалить ненулевое ограничение для столбца в Firebird 2.5?
К сожалению, это не сработало:
Alter table ESTOQUE_GRUPO_SUBELEMENTO ALTER column ID_SUBELEMENTO TYPE int null ;
В Firebird 2.5 вы не можете использовать DDL для добавления ограничения NOT NULL
к существующему столбцу, а удаление возможно только косвенно, путем удаления ограничения по имени. Это было изменено в Firebird 3.0 (см. Управление нулевым значением в доменах и столбцах в примечаниях к выпуску Firebird 3.0).
NOT NULL
реализован как ограничение. Если вы назвали его (или нашли сгенерированное имя в системных таблицах), вы можете удалить ограничение в Firebird 2.5. Как описано в Руководстве по Null в Firebird, раздел Делаем столбцы, не допускающие значения NULL, снова обнуляемыми.
Чтобы бросить это:
alter table Adventures drop constraint IdNotNull
(где IdNotNull
— имя ограничения NOT NULL
)
Чтобы найти имя ограничения, вы можете использовать следующий запрос:
select rc.rdb$constraint_name from rdb$relation_constraints rc inner join rdb$check_constraints cc on rc.rdb$constraint_name = cc.rdb$constraint_name where rc.rdb$constraint_type = 'NOT NULL' and rc.rdb$relation_name = '<TableName>' and cc.rdb$trigger_name = '<FieldName>'
См. ссылку выше для получения дополнительной информации.
В Firebird 3.0 и выше вы также можете использовать
alter table table_name alter column_name drop not null
Хорошо, я подумал о том, чтобы в качестве альтернативы поставить какое-то значение по умолчанию, например 0. Рад, что удалось избавиться от ограничения not null.