Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Нужен AutoInc, но по моим правилам, Создание своего AutoInc 
:(
    Опции темы
SFrog
  Дата 30.9.2008, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Поработав в некоторых других системах нашел удобным такой вариант, что поле для PK, объявленное как автоинкрементное, будучи заданным NULL автоматически устанавливается в очередное значение, а будучи заданным явно пытается установится в заданное явно значение, а кроме того, допускает редактирование. Теперь перехожу на ADS и если первому условию поле типа AutoInc удовлетворяет, но вот последующим двум - увы.
Объявил поле как INTEGER и сочинил такой триггер

Код

CREATE TRIGGER tr_io_i_CRNCGETID ON CURRENCY INSTEAD OF INSERT 
BEGIN 
  DECLARE @NewID INTEGER;

  IF (SELECT CRNCCODE from __new) IS NULL THEN
    @NewID=paCommon.GetID('CURRENCY', 'CRNCCODE');
    UPDATE __new SET CRNCCODE=@NewID;
  END IF;
  INSERT INTO CURRENCY SELECT * FROM __new;
END 
PRIORITY 1;


Где "@NewID=paCommon.GetID('CURRENCY', 'CRNCCODE');" - вызов функции-генератора следующего значения для PK CRNCCODE.

Теперь у меня в плане присвоения значений для PK все, как мне хочется, но напрягают два момента:
1) Хотелось бы по возможности обойтись без INSTEAD OF;
2) (и главное) по CRNCCODE, не могу установить ограничение NOT NULL, потому что тогда до триггера и дело не доходит.

Может подскажете более элегантное решение?

P.S. Таблиц будет много, поэтому создание VIEW и INSTEАD OF на него не предлагать


Это сообщение отредактировал(а) SFrog - 30.9.2008, 12:46
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Advantage Database Server | Следующая тема »


 




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


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

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