Модераторы: kdv, CyberMax
-
Anark1
- Сообщения: 26
- Зарегистрирован: 28 июн 2007, 00:52
Сообщение
Anark1 » 01 авг 2007, 13:58
Проблема такая. Необходимо, чтобы поле первичного ключа было автоинкрементным.
Таблица
Генератор
Код: Выделить всё
CREATE GENERATOR GEN_MY_TABLE_ID;
SET GENERATOR GEN_MY_TABLE_ID TO 0;
Триггер
Код: Выделить всё
CREATE TRIGGER TR_MY_TABLE_BI FOR MY_TABLE
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
IF (NEW.ID IS NULL) THEN NEW.ID = GEN_ID(GEN_CARDS_ID, 1);
END
Условие первичного ключа - NOT NULL, но в таком случае не сможет выполняться триггер - условие IF (NEW.ID IS NULL).
Как быть в таком случае. Читал статью о генераторах. Через SELECT работать не очень хочется.
-
stix-s
- Заслуженный разработчик
- Сообщения: 557
- Зарегистрирован: 13 дек 2005, 11:52
Сообщение
stix-s » 01 авг 2007, 14:12
Anark1 писал(а):Проблема такая. Необходимо, чтобы поле первичного ключа было автоинкрементным.
Таблица
Генератор
Код: Выделить всё
CREATE GENERATOR GEN_MY_TABLE_ID;
SET GENERATOR GEN_MY_TABLE_ID TO 0;
Триггер
Код: Выделить всё
CREATE TRIGGER TR_MY_TABLE_BI FOR MY_TABLE
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
IF (NEW.ID IS NULL) THEN NEW.ID = GEN_ID(GEN_CARDS_ID, 1);
END
Условие первичного ключа - NOT NULL, но в таком случае не сможет выполняться триггер - условие IF (NEW.ID IS NULL).
Как быть в таком случае. Читал статью о генераторах. Через SELECT работать не очень хочется.
по диагонали читал, заодно посмотри, что такое триггеры
-
Anark1
- Сообщения: 26
- Зарегистрирован: 28 июн 2007, 00:52
Сообщение
Anark1 » 01 авг 2007, 14:22
stix-s писал(а):
по диагонали читал, заодно посмотри, что такое триггеры
Читал достаточно. С точки зрения теории все выглядит верно, где то даже видел аналогичный код. Но при попытке Commit получаю ошибку.
Может быть все таки растолкуешь?
-
Anark1
- Сообщения: 26
- Зарегистрирован: 28 июн 2007, 00:52
Сообщение
Anark1 » 01 авг 2007, 14:30
Ошибка среды. вопрос закрыт.