Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 как получить значение автоинкрементного поля  [new]
angro
Member

Откуда:
Сообщений: 388
делаю вставку через АДО, одно из полей автоинкрементное, как узнать какое значение там получилось?
20 янв 13, 18:49    [13799032]     Ответить | Цитировать Сообщить модератору
 Re: как получить значение автоинкрементного поля  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31442
angro
делаю вставку через АДО, одно из полей автоинкрементное, как узнать какое значение там получилось?
SCOPE_IDENTITY()
20 янв 13, 18:55    [13799042]     Ответить | Цитировать Сообщить модератору
 Re: как получить значение автоинкрементного поля  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
В общем случае без дополнительного поля никак.
А зависит от наличия триггеров на вставку, их вида
и наличия в них INSERTов в таблицы с IDENTITY.
20 янв 13, 19:12    [13799097]     Ответить | Цитировать Сообщить модератору
 Re: как получить значение автоинкрементного поля  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
iap
В общем случае без дополнительного поля никак.
А зависит от наличия триггеров на вставку, их вида
и наличия в них INSERTов в таблицы с IDENTITY.
Вот, помню обсуждение было
20 янв 13, 19:29    [13799140]     Ответить | Цитировать Сообщить модератору
 Re: как получить значение автоинкрементного поля  [new]
angro
Member

Откуда:
Сообщений: 388
alexeyvg,

спасибо, IDENT_CURRENT ('trash') то что надо выдаёт
20 янв 13, 19:55    [13799210]     Ответить | Цитировать Сообщить модератору
 Re: как получить значение автоинкрементного поля  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
angro
alexeyvg,

спасибо, IDENT_CURRENT ('trash') то что надо выдаёт
"В огороде бузина, а в Киеве - дядька"!
Где это alexeyvg про IDENT_CURRENT говорил?
Вообще, это худший выбор из всех доступных возможностей. IMHO
20 янв 13, 20:02    [13799232]     Ответить | Цитировать Сообщить модератору
 Re: как получить значение автоинкрементного поля  [new]
angro
Member

Откуда:
Сообщений: 388
iap,

:) на той же странице в мсдн написано

вы имеете ввиду что могут быть другие вставки перед тем как я его прочитаю?
20 янв 13, 20:23    [13799297]     Ответить | Цитировать Сообщить модератору
 Re: как получить значение автоинкрементного поля  [new]
invm
Member

Откуда: Москва
Сообщений: 9406
angro,

iap, очевидно, имел в виду это:
http://msdn.microsoft.com/ru-ru/library/ms175098.aspx
Возврат последнего значения идентификатора, созданного для указанной таблицы или представления. Последнее созданное значение идентификатора может относиться к любому сеансу и любой области.
20 янв 13, 21:18    [13799465]     Ответить | Цитировать Сообщить модератору
 Re: как получить значение автоинкрементного поля  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
angro
iap,

:) на той же странице в мсдн написано

вы имеете ввиду что могут быть другие вставки перед тем как я его прочитаю?
И не только вставки, а и удаления!
20 янв 13, 21:49    [13799545]     Ответить | Цитировать Сообщить модератору
 Re: как получить значение автоинкрементного поля  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
invm
angro,

iap, очевидно, имел в виду это:
http://msdn.microsoft.com/ru-ru/library/ms175098.aspx
Возврат последнего значения идентификатора, созданного для указанной таблицы или представления. Последнее созданное значение идентификатора может относиться к любому сеансу и любой области.
Значит, IDENT_CURRENT, вообще говоря, подразумевает необходимость монопольной блокировки таблицы.
20 янв 13, 21:52    [13799555]     Ответить | Цитировать Сообщить модератору
 Re: как получить значение автоинкрементного поля  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
angro
делаю вставку через АДО, одно из полей автоинкрементное, как узнать какое значение там получилось?
select @@IDENTITY
20 янв 13, 22:47    [13799697]     Ответить | Цитировать Сообщить модератору
 Re: как получить значение автоинкрементного поля  [new]
invm
Member

Откуда: Москва
Сообщений: 9406
Cygapb-007
select @@IDENTITY
А потом на таблицу навесят (или уже навешен) триггер, вставляющий данные в другую таблицу с identity и начнется у ТС веселуха...
20 янв 13, 23:08    [13799771]     Ответить | Цитировать Сообщить модератору
 Re: как получить значение автоинкрементного поля  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31442
angro
alexeyvg,

спасибо, IDENT_CURRENT ('trash') то что надо выдаёт
Не надо только говоритьЮ что это я подсказал ошибочный метод!

Используйте SCOPE_IDENTITY()
Cygapb-007
select @@IDENTITY
Это такой же неправильный метод, как и IDENT_CURRENT, хотя и чуть получше.
20 янв 13, 23:43    [13799892]     Ответить | Цитировать Сообщить модератору
 Re: как получить значение автоинкрементного поля  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
alexeyvg, спасибо, не знал.. пользовался @@, а прочитал хелп... - был не прав
21 янв 13, 01:06    [13800138]     Ответить | Цитировать Сообщить модератору
 Re: как получить значение автоинкрементного поля  [new]
Гость333
Member

Откуда:
Сообщений: 3683
iap
angro
iap,

:) на той же странице в мсдн написано

вы имеете ввиду что могут быть другие вставки перед тем как я его прочитаю?
И не только вставки, а и удаления!

Про удаление не понял, оно ведь не меняет значения IDENT_CURRENT. Или что вы имели в виду?
21 янв 13, 09:51    [13800697]     Ответить | Цитировать Сообщить модератору
 Re: как получить значение автоинкрементного поля  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
Гость333
iap
пропущено...
И не только вставки, а и удаления!

Про удаление не понял, оно ведь не меняет значения IDENT_CURRENT. Или что вы имели в виду?
Ну, я вставил, кто-то тут же удалил - получаю ID несуществующей записи.
Но, действительно, это касается почти любых способов.
21 янв 13, 10:01    [13800752]     Ответить | Цитировать Сообщить модератору
 Re: как получить значение автоинкрементного поля  [new]
Crimean
Member

Откуда:
Сообщений: 13148
invm
Cygapb-007
select @@IDENTITY
А потом на таблицу навесят (или уже навешен) триггер, вставляющий данные в другую таблицу с identity и начнется у ТС веселуха...


ровно так же для scope навесят instead of триггер с тем же результатом - "веселуха"
только вот @@identity эмулировать можно, а scope - нельзя
21 янв 13, 11:36    [13801556]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить