Как при добавлении новой записи определить уникальное значение ключевого поля?

Алексей
Дата: 21.03.2001 14:49:14
Как при добавлении новой записи определить уникальное значение ключевого поля?
Genady
Дата: 21.03.2001 15:03:38
Определить после добавления записи или для добавляемой записи?

Если поле Identity и нужно узнать какое значение было присвоено ключу, тогда зразу после добавления можно узнать из переменной @@identity
Sasha Kurzenev
Дата: 15.09.2003 18:31:08
А если происходит вставка нескольких строк и нужно знать номера каждой?
Mik Prokoshin
Дата: 15.09.2003 18:36:26
1) делать вставку в цикле согласно Genady
2) иметь фиктивное поле в таблице, заполнить его на клиенте, по нему после вставки определить значения PK
Иначе - никак IMHO :-(, это сильно ограничивает возможности применения BatchOptimistic в АДО, например.
alex-ikar
Дата: 15.09.2003 18:41:22
2Sasha Kurzenev
наверное только из триггера.

2Genady
а если по инсерту в таблицу tab1 срабатывает триггер и делает инсерт в таблицу tab2 то @@identity вернет ID для таблицы tab2.

2Алексей
Исходя из выше сказанного лучше пользоваться ф-циями:
- IDENT_CURRENT('table_name')
- SCOPE_IDENTITY( )
Даже если у вас никаких триггеров с инсертами нет, то все равно лучше использовать указанные ф-ции т.к. если в будущем кто-нить добавит этот триггер ваша хп ВСЕГДА будет возвращать нормальные значения.
Sasha Kurzenev
Дата: 15.09.2003 18:53:50
Дело в том что я просто скрипт делаю без клиента и тригеров.
Происходит вставка типа:
INSERT INTO Table
SELECT ...
FROM ...
WHERE...

И потом надо еще в одну таблицу добавить ID только вставленных строк.
Или может можно сразу как то?
Белов Владимир
Дата: 15.09.2003 18:57:44
>alex-ikar
"...лучше использовать указанные ф-ции т.к. если в будущем кто-нить добавит этот триггер ваша хп ВСЕГДА ..."

В данном случае я бы не утверждал так категорично. При использовании ф-ции IDENT_CURRENT - ваша фраза теряет смысл, а также и "правильность" работы хп
alex-ikar
Дата: 15.09.2003 19:01:28
2Sasha Kurzenev
1шаг. перед инсертом получаешь текущее значение ID для таблицы tab1.
2шаг. после инсерта из таблицы tab1 выбираешь данные у которых ID > полученного в шаге 1.
Но это будет работать корректно только если парраллельно с тобой никто больше не будет добавлять записи, или если ты заблокируешь таблицы на время выполнения шагов 1 и 2.
alex-ikar
Дата: 15.09.2003 19:03:17
2Белов Владимир
Интересно, и как это она его теряет? ;)
Белов Владимир
Дата: 15.09.2003 19:04:44
IDENT_CURRENT возвращает текущее значение идентити для таблицы, независимо от сессии.