Модераторы: Akella
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Программно определить наличие генератора и триггер 
:(
    Опции темы
aquamakc
Дата 6.4.2017, 09:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 12.1.2017

Репутация: нет
Всего: нет



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


Творец
****


Профиль
Группа: Модератор
Сообщений: 18470
Регистрация: 14.5.2003
Где: Корусант

Репутация: 20
Всего: 329



Цитата(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 ; ^

PM MAIL   Вверх
Google
  Дата 18.10.2017, 08:40 (ссылка)  





  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Interbase"
Alex

Обязательно указание:

1. Версию InterBase (Firebird, Yaffil)

2. Способа доступа (ADO, BDE, IBX и т.д.)

  • КАК ПРАВИЛЬНО ОФОРМИТЬ КОД - ЗДЕСЬ
  • КАК ПРАВИЛЬНО УКАЗАТЬ ТЕКСТ ОШИБКИ - ЗДЕСЬ
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • FAQ раздела лежит здесь!

Если Вам понравилась атмосфера форума, заходите к нам чаще! С Уважением, Akella.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Firebird, Interbase | Следующая тема »


 




[ Время генерации скрипта: 0.0789 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.