Доброго времени суток!

Ded wrote:
Без крайней необходимости лучше, конечно, PK. Но бывают случаи, когда PK летит. И появляются дубликаты. Иного способа борьбы с ними, кроме как через дбкей, я лично не знаю.

Наверное, можно и более экзотическим образом - грохнуть PK, в процедуре
отсортировать по ID, и через WHERE CURRENT OF удалить дубликаты.

Кстати, Current Of именно через него и
работает.


Не совсем так.
Цитата из http://www.ibase.ru/devinfo/dataaccesspaths.htm

Существует ошибочное мнение, что данный метод доступа является синтаксическим 
аналогом выборки с помощью RDB$DB_KEY, однако это не так. Позиционированный 
доступ работает только для активного курсора, т.е. для уже отфетченной записи 
(с помощью команд FOR SELECT или FETCH). В противном случае будет выдана ошибка 
isc_no_cur_rec (no current record for fetch operation). Таким образом, это 
просто способ ссылки на активную запись курсора, не требующий операций чтения 
вообще. В то время как выборка через RDB$DB_KEY задействует доступ через 
идентификатор записи и, следовательно, всегда приводит к фетчу одной страницы.

С уважением, Евгений.

Ответить