Firebird: как назначить идентификатор существующим строкам из недавно добавленного генератора - PullRequest
2 голосов
/ 30 мая 2010

У меня есть таблица, которая уже содержит несколько строк и не имеет первичного ключа.

Я хочу добавить первичный ключ сейчас, но для этого мне нужно установить уникальные значения для поля первичного ключа существующих строк. Как это можно сделать, используя только что добавленный генератор?

1 Ответ

5 голосов
/ 30 мая 2010

Первичный ключ не генерирует никаких значений сам по себе. Это ограничение. В вашем примере вам нужно сделать следующее:

  1. Добавить столбец для значения PK, объявить его NOT NULL
  2. Заполнить столбец уникальными значениями
  3. Создать ограничение PK

Пример:

CREATE TABLE test (a varchar(20));

COMMIT;

INSERT INTO test (a) VALUES ('A');
INSERT INTO test (a) VALUES ('B');
INSERT INTO test (a) VALUES ('C');

COMMIT;

ALTER TABLE test ADD pk INTEGER NOT NULL;

CREATE GENERATOR g_test;

COMMIT;

UPDATE test SET pk = GEN_ID(g_test, 1);

ALTER TABLE test ADD CONSTRAINT test_pk
  PRIMARY KEY (pk);
...