Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как при добавлении новой записи определить уникальное значение ключевого поля?  [new]
Алексей
Guest
Как при добавлении новой записи определить уникальное значение ключевого поля?
21 мар 01, 14:49    [4585]     Ответить | Цитировать Сообщить модератору
 Как при добавлении новой записи определить уникальное значение ключевого поля?  [new]
Genady
Member

Откуда: Москва
Сообщений: 2005
Определить после добавления записи или для добавляемой записи?

Если поле Identity и нужно узнать какое значение было присвоено ключу, тогда зразу после добавления можно узнать из переменной @@identity
21 мар 01, 15:03    [4586]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Как при добавлении новой записи определить уникальное значение ключевого пол  [new]
Sasha Kurzenev
Member

Откуда: Russia
Сообщений: 12
А если происходит вставка нескольких строк и нужно знать номера каждой?
15 сен 03, 18:31    [339401]     Ответить | Цитировать Сообщить модератору
 Re: Как при добавлении новой записи определить уникальное значение ключевого пол  [new]
Mik Prokoshin
Member

Откуда: Барнаул
Сообщений: 1240
1) делать вставку в цикле согласно Genady
2) иметь фиктивное поле в таблице, заполнить его на клиенте, по нему после вставки определить значения PK
Иначе - никак IMHO :-(, это сильно ограничивает возможности применения BatchOptimistic в АДО, например.
15 сен 03, 18:36    [339414]     Ответить | Цитировать Сообщить модератору
 Re: Как при добавлении новой записи определить уникальное значение ключевого пол  [new]
alex-ikar
Member

Откуда: Москва
Сообщений: 192
2Sasha Kurzenev
наверное только из триггера.

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

2Алексей
Исходя из выше сказанного лучше пользоваться ф-циями:
- IDENT_CURRENT('table_name')
- SCOPE_IDENTITY( )
Даже если у вас никаких триггеров с инсертами нет, то все равно лучше использовать указанные ф-ции т.к. если в будущем кто-нить добавит этот триггер ваша хп ВСЕГДА будет возвращать нормальные значения.
15 сен 03, 18:41    [339417]     Ответить | Цитировать Сообщить модератору
 Re: Как при добавлении новой записи определить уникальное значение ключевого пол  [new]
Sasha Kurzenev
Member

Откуда: Russia
Сообщений: 12
Дело в том что я просто скрипт делаю без клиента и тригеров.
Происходит вставка типа:
INSERT INTO Table
SELECT ...
FROM ...
WHERE...

И потом надо еще в одну таблицу добавить ID только вставленных строк.
Или может можно сразу как то?
15 сен 03, 18:53    [339439]     Ответить | Цитировать Сообщить модератору
 Re: Как при добавлении новой записи определить уникальное значение ключевого пол  [new]
Белов Владимир
Member

Откуда: Москва
Сообщений: 1716
>alex-ikar
"...лучше использовать указанные ф-ции т.к. если в будущем кто-нить добавит этот триггер ваша хп ВСЕГДА ..."

В данном случае я бы не утверждал так категорично. При использовании ф-ции IDENT_CURRENT - ваша фраза теряет смысл, а также и "правильность" работы хп
15 сен 03, 18:57    [339447]     Ответить | Цитировать Сообщить модератору
 Re: Как при добавлении новой записи определить уникальное значение ключевого пол  [new]
alex-ikar
Member

Откуда: Москва
Сообщений: 192
2Sasha Kurzenev
1шаг. перед инсертом получаешь текущее значение ID для таблицы tab1.
2шаг. после инсерта из таблицы tab1 выбираешь данные у которых ID > полученного в шаге 1.
Но это будет работать корректно только если парраллельно с тобой никто больше не будет добавлять записи, или если ты заблокируешь таблицы на время выполнения шагов 1 и 2.
15 сен 03, 19:01    [339457]     Ответить | Цитировать Сообщить модератору
 Re: Как при добавлении новой записи определить уникальное значение ключевого пол  [new]
alex-ikar
Member

Откуда: Москва
Сообщений: 192
2Белов Владимир
Интересно, и как это она его теряет? ;)
15 сен 03, 19:03    [339461]     Ответить | Цитировать Сообщить модератору
 Re: Как при добавлении новой записи определить уникальное значение ключевого пол  [new]
Белов Владимир
Member

Откуда: Москва
Сообщений: 1716
IDENT_CURRENT возвращает текущее значение идентити для таблицы, независимо от сессии.
15 сен 03, 19:04    [339465]     Ответить | Цитировать Сообщить модератору
 Re: Как при добавлении новой записи определить уникальное значение ключевого пол  [new]
alex-ikar
Member

Откуда: Москва
Сообщений: 192
2Белов Владимир
Ну и в чем проблема?!
Это ведь и требуется: для таблицы tab1 получить текущий ID.
:)
15 сен 03, 19:07    [339470]     Ответить | Цитировать Сообщить модератору
 Re: Как при добавлении новой записи определить уникальное значение ключевого пол  [new]
Glory
Member

Откуда:
Сообщений: 104760
2alex-ikar
Это ведь и требуется: для таблицы tab1 получить текущий ID.

А на другие сессии, добаляющие записи в туже таблицу, можно просто наплевать :)

2Sasha Kurzenev
И потом надо еще в одну таблицу добавить ID только вставленных строк.
Или может можно сразу как то?


Можно. В триггере на INSERT таблицы можно "увидить" добавляемы в таблицу записи.
15 сен 03, 19:22    [339485]     Ответить | Цитировать Сообщить модератору
 Re: Как при добавлении новой записи определить уникальное значение ключевого пол  [new]
Crimean
Member

Откуда:
Сообщений: 13148
Классическое решение - в записи есть СМЫСЛОВАЯ уникальность, которая, ессно, известна ДО вставки записи, ПОСЛЕ вставки известен "суррогатный" ПК, по которому ПОТОМ работает БАЗА. Поскольку "клиент" знает уникальный набор полей и до вставки, то определить Ид после вставки в любом случае не составит труда.
Исключение - таблицы типа протоколов, где уникальности быть не может, но и ведение протоколов средствами сиквела ИМХО то еще занятие.
16 сен 03, 10:31    [340072]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить