Новое ключевое поле в заполненной таблице

Модераторы: kdv, CyberMax

Ответить
Nat
Сообщения: 37
Зарегистрирован: 20 авг 2007, 17:23

Новое ключевое поле в заполненной таблице

Сообщение Nat » 10 сен 2007, 11:04

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

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 10 сен 2007, 11:18

сначала надо создать столбец. затем генератор. потом заполнить его ОДНИМ запросом (update), с использованием генератора. Все. генератор останется на последнем значении, его можно использовать дальше.

Nat
Сообщения: 37
Зарегистрирован: 20 авг 2007, 17:23

Сообщение Nat » 10 сен 2007, 11:31

Спасибо! Весьма благодарен.

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 10 сен 2007, 11:46

После создания поля и заполнения его значениями с помощью update, но перед построением PK по нему, необходимо собрать мусор в таблице, например с помощью select count(*) from table. Иначе создание PK не пройдёт.

Nat
Сообщения: 37
Зарегистрирован: 20 авг 2007, 17:23

Сообщение Nat » 10 сен 2007, 11:53

Спасибо!

hvlad
Разработчик Firebird
Сообщения: 1244
Зарегистрирован: 21 мар 2005, 10:48

Сообщение hvlad » 10 сен 2007, 13:25

WildSery писал(а):После создания поля и заполнения его значениями с помощью update, но перед построением PK по нему, необходимо собрать мусор в таблице, например с помощью select count(*) from table. Иначе создание PK не пройдёт.
Это что-то новое в нашей практике. И пример есть ?

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 10 сен 2007, 15:26

hvlad писал(а):Это что-то новое в нашей практике. И пример есть ?
Пардон.
Это не новое, это старое.
Сейчас проверил - на FB2 такого нет.
Зато вот 1.0.3 выдаёт
"Invalid insert or update value(s): object columns are constrained - no 2 table rows can have duplicate column values.
attempt to store duplicate value (visible to active transactions) in unique index "RDB$PRIMARY123".
null segment of UNIQUE KEY."


ЗЫ: Влад, я тебя тут, в PM, просил патчик для "215" к 2.0.1, ещё некогда было выслать?

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 10 сен 2007, 15:45

Это что-то новое в нашей практике. И пример есть ?
было. а если еще в это время другая транзакция мусор не даст собрать, то и на 2.0 не пройдет :)
wildsery прав, я и сам про такую фишку забыл. версионность, тудыть...

hvlad
Разработчик Firebird
Сообщения: 1244
Зарегистрирован: 21 мар 2005, 10:48

Сообщение hvlad » 10 сен 2007, 15:46

WildSery писал(а):
hvlad писал(а):Это что-то новое в нашей практике. И пример есть ?
Пардон.
Это не новое, это старое.
Сейчас проверил - на FB2 такого нет.
Зато вот 1.0.3 выдаёт
"Invalid insert or update value(s): object columns are constrained - no 2 table rows can have duplicate column values.
attempt to store duplicate value (visible to active transactions) in unique index "RDB$PRIMARY123".
null segment of UNIQUE KEY."
Код, который за это отвечает, есть давным давно, проверять исходники 1.х - лениво ;)

WildSery писал(а):ЗЫ: Влад, я тебя тут, в PM, просил патчик для "215" к 2.0.1, ещё некогда было выслать?
Не обратил внимания, сорри. Вышлю вечером

Ответить