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

Откуда:
Сообщений: 560
Некая процерура делает инсерт в таблицу с identity
Все это в явной транзакции

Я хочу отловить identity в контексте concurrency

begin tran
exec usp_tableA_Insert

select ident_current('dbo.A')

end tran
2 окт 19, 18:10    [21985266]     Ответить | Цитировать Сообщить модератору
 Re: Identity + concurrency  [new]
invm
Member

Откуда: Москва
Сообщений: 9350
scope_identity()
2 окт 19, 18:17    [21985272]     Ответить | Цитировать Сообщить модератору
 Re: Identity + concurrency  [new]
_human
Member

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

Пробовал,
К сожалению нет
2 окт 19, 18:19    [21985273]     Ответить | Цитировать Сообщить модератору
 Re: Identity + concurrency  [new]
invm
Member

Откуда: Москва
Сообщений: 9350
_human
К сожалению нет
Что именно "нет"?
2 окт 19, 18:25    [21985278]     Ответить | Цитировать Сообщить модератору
 Re: Identity + concurrency  [new]
_human
Member

Откуда:
Сообщений: 560
invm

автор
Therefore, if two statements are in the same stored procedure, function, or batch, they are in the same scope.

https://docs.microsoft.com/en-us/sql/t-sql/functions/scope-identity-transact-sql?view=sql-server-2017
2 окт 19, 18:47    [21985309]     Ответить | Цитировать Сообщить модератору
 Re: Identity + concurrency  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36987
Отлавливать надо в процедуре. В противном случае не решается в многопользовательской среде без сериализации вставки данных в таблице.

Сообщение было отредактировано: 2 окт 19, 18:51
2 окт 19, 18:50    [21985316]     Ответить | Цитировать Сообщить модератору
 Re: Identity + concurrency  [new]
invm
Member

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

Что вы хотите сказать этой цитатой?
2 окт 19, 18:54    [21985320]     Ответить | Цитировать Сообщить модератору
 Re: Identity + concurrency  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36987
invm,

Он намекает, что ему scope_identity не подходит, потому что он пытается получить сгенерированное значение identity за скоупом.
2 окт 19, 19:31    [21985352]     Ответить | Цитировать Сообщить модератору
 Re: Identity + concurrency  [new]
_human
Member

Откуда:
Сообщений: 560
Спасибо, именно это имелось ввиду
Сейчас нет возможности написать нормальный семпл
но scope_identity() возвращает NULL
Идея поместить вызов процедуры в.явную транзакцию как я понимаю несработает
2 окт 19, 19:45    [21985361]     Ответить | Цитировать Сообщить модератору
 Re: Identity + concurrency  [new]
invm
Member

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

Понятно.
Самое простое - в процедуре записывать scope_identity во временную таблицу уровня сессии.
Один из минусов - для каждой сессии будет свой план выполнения этой процедуры.
2 окт 19, 20:16    [21985377]     Ответить | Цитировать Сообщить модератору
 Re: Identity + concurrency  [new]
_human
Member

Откуда:
Сообщений: 560
Ок, ещё такой вопрос
Человек вставляет в таблицу и ловит в @@identity
Какова вероятность что вернет не его identity?
2 окт 19, 21:04    [21985409]     Ответить | Цитировать Сообщить модератору
 Re: Identity + concurrency  [new]
Gerros
Member

Откуда: Харьков
Сообщений: 501
_human
Какова вероятность что вернет не его identity?
@@identity чужого не возвращает. Просто не всем подходит айдишник от вставки, сделанной триггером...

если есть возможность изменить хранимку, добавьте в неё
return scope_identity()
и забирайте его сами
exec @id = usp_tableA_Insert
2 окт 19, 21:30    [21985420]     Ответить | Цитировать Сообщить модератору
 Re: Identity + concurrency  [new]
invm
Member

Откуда: Москва
Сообщений: 9350
_human
Человек вставляет в таблицу и ловит в @@identity
Какова вероятность что вернет не его identity?
Если подразумевается, что "не его" - это значение из другого сеанса, то нулевая.
Иначе, 100%, если у таблицы есть триггер, в котором тоже есть вставка в другую таблицу с identity.
2 окт 19, 21:31    [21985421]     Ответить | Цитировать Сообщить модератору
 Re: Identity + concurrency  [new]
_human
Member

Откуда:
Сообщений: 560
Gerros
если есть возможность изменить хранимку, добавьте в неё

такого нет

invm
Если подразумевается, что "не его" - это значение из другого сеанса

в теории может быть что апликация в 1-й сессии(@@spid) выполнит 500 процедур асинхронно
так что какой-то из @@identity вернет "чужой" ?
2 окт 19, 22:06    [21985428]     Ответить | Цитировать Сообщить модератору
 Re: Identity + concurrency  [new]
invm
Member

Откуда: Москва
Сообщений: 9350
_human
так что какой-то из @@identity вернет "чужой" ?
Нет
2 окт 19, 22:11    [21985433]     Ответить | Цитировать Сообщить модератору
 Re: Identity + concurrency  [new]
Gerros
Member

Откуда: Харьков
Сообщений: 501
_human
апликация в 1-й сессии(@@spid) выполнит 500 процедур асинхронно...
SQL Server обслуживает команды внутри сессии синхронно. Прожевал - выплюнул. Прожевал - выплюнул. Романтика...
2 окт 19, 23:06    [21985447]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить