Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / update or insert как обойти модификацию primary key / 3 сообщений из 3, страница 1 из 1
02.11.2018, 09:40
    #39726982
abwabw
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
update or insert как обойти модификацию primary key
Использую UPDATE OR INSERT .
Вопрос: возможно ли организовать при UPDATE не модифицировать primary key, а при INSERT брать значение из генератора без дополнительных триггеров?

Например:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
CREATE TABLE texample(
field_pk INTEGER NOT NULL,
field_1 VARCHAR(10),
field_2 INTEGER
);
ALTER TABLE texample ADD CONSTRAINT PK_TEXAMPLE PRIMARY KEY (field_PK);

CREATE SEQUENCE GEN_TEXAMPLE_ID;



Провожу модификацию или вставку:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
update or insert INTO texample
(field_pk,
field_1,
field_2)
values
(GEN_ID(gen_texample_id,1),
'ПРИМЕР',
222)
matching (field_2)



З.Ы. В приведённом примере значение field_pk (PRIMARY KEY) при модификации всегда меняется на новое сгенерированное в генераторе.
...
Рейтинг: 0 / 0
02.11.2018, 09:45
    #39726989
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
update or insert как обойти модификацию primary key
abwabw,

возможно, но для этого надо либо делать before insert триггер где будет дёргаться генератор, либо использовать IDENTITY столбец.

Если это не устраивает используй более навороченный оператор MERGE там это легко решается.
...
Рейтинг: 0 / 0
02.11.2018, 13:47
    #39727215
abwabw
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
update or insert как обойти модификацию primary key
Симонов Денис,

Правильно, MERGE рулит.
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / update or insert как обойти модификацию primary key / 3 сообщений из 3, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]