Добавление уникального столбца в существующую базу данных SQL - PullRequest
3 голосов
/ 31 января 2012

Я хочу добавить столбец в существующую базу данных Firebird (версия 2.5) и написать процедуру, с помощью которой я могу назначить каждой записи различное значение.Что-то вроде добавления столбца и автоматической генерации данных для него.

Например, если я добавлю новый столбец с именем «ID» (число), которое я хочу, то инициализирую уникальное значение для каждой из записей.Итак, мой столбец ID будет содержать записи, скажем, от 1 до 500. Как я могу добиться этого, используя только сценарий SQL (т.е. без использования какого-либо высокоуровневого языка программирования для генерации команд SQL)?

В основном то, что мне нужноэто что-то вроде идентичности столбцов в Firebird 3.0:

alter table MY_TABLE
add ID int identity(1,1)

Ответы [ 3 ]

2 голосов
/ 31 января 2012

Для этого столбца будет установлено значение по умолчанию 1:

alter table MY_TABLE add ID int default 1 

. Вы можете использовать автоинкрементный ПК, используя генератор и триггер BEFORE INSERT:

CREATE GENERATOR GEN_PK;
COMMIT;


CREATE TRIGGER GENERATE_PK FOR MY_TABLE
ACTIVE BEFORE INSERT
AS
BEGIN
  IF(NEW.ID IS NULL) THEN 
    NEW.ID = GEN_ID(GEN_PK, 1);
END

Я не сделалНе понимаю, когда вам нужны случайные данные, которые вы сказали.

обратите внимание, что это два разных примера, их нельзя использовать вместе в одном столбце

1 голос
/ 31 января 2012

Это утверждение поможет вам:

EXECUTE BLOCK
AS
  DECLARE VARIABLE DBKEY CHAR(8);
  DECLARE VARIABLE C INTEGER = 1;
BEGIN
  FOR 
    SELECT 
      RDB$DB_KEY 
    FROM 
      your_table_name 
    INTO 
      :dbkey
  DO BEGIN
    UPDATE your_table_name SET id = :c WHERE rdb$db_key = :dbkey;
    c = :c + 1;
  END
END
0 голосов
/ 31 января 2012

Мне пришлось добавить еще один ответ, потому что я не могу написать @id более одного раза в комментарии

Нет, триггер не будет срабатывать для существующих столбцов.Вы можете использовать решения @ain или сделать что-то подобное перед созданием триггера:

DECLARE @id INT 
SET @id = 0 
UPDATE MY_TABLE
SET @id = id = @id + 1 
GO 
...