Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Firebird, Interbase > Программно определить наличие генератора и триггер


Автор: aquamakc 6.4.2017, 09:19
Доброго времени суток.
Есть старая БД на Embedded Firebird 2.5. Работаю с ней на C# через ADO.NET. При очередном обновлении хочу добавить в неё автоинкремент поля первичного ключа. Для некоторых таблиц в это БД это было сделано с помощью генератора и триггера. Для некоторых - нет. Мысль такая: ПО при запуске проверяет наличие определённого генератора и триггера, если нет - создаёт (также они создаются при создании новой БД).
А вот как определить есть они или нет - найти не смог.

Автор: Akella 6.4.2017, 09:56
Цитата(aquamakc @  6.4.2017,  09:19 Найти цитируемый пост)
А вот как определить есть они или нет - найти не смог. 


читай про системные таблицы

Добавлено через 1 минуту и 9 секунд
Проверить и удалить генератор (SEQUENCE)

Код

SET TERM ^ ;
execute block
as
begin
  IF (exists (select RDB$GENERATOR_NAME from RDB$GENERATORS where RDB$GENERATOR_NAME = 'GEN_FTP_ID')) THEN
    begin
      execute STATEMENT 'DROP SEQUENCE GEN_FTP_ID;';
    end
end
^

SET TERM ; ^


Добавлено через 3 минуты и 49 секунд
проверить и добавить генератор

Код

SET TERM ^ ;
execute block
as
begin
  IF (not exists (SELECT 1 FROM RDB$GENERATORS WHERE RDB$GENERATOR_name = 'GEN_SPR_NOVO_ID')) THEN
    begin
      execute STATEMENT 'CREATE SEQUENCE GEN_SPR_NOVO_ID';
    end
end
^
SET TERM ; ^


;


Добавлено через 5 минут и 6 секунд
Изменить триггер или создать, если отсутствует - CREATE OR ALTER trigger 

Код

SET TERM ^ ;

CREATE OR ALTER trigger phones_bi for phones
active before insert position 0
AS
BEGIN
  IF (NEW.ID IS NULL) THEN
    NEW.ID = GEN_ID(GEN_PHONES_ID,1);
  NEW.exp = 'T';

  If (new.LAS_COUNT is NULL) Then new.LAS_COUNT = 0;
  If (new.date_input is NULL) Then new.date_input = current_date;
END^

SET TERM ; ^

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)