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


Автор: SFrog 30.9.2008, 12:45
Поработав в некоторых других системах нашел удобным такой вариант, что поле для 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 на него не предлагать

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