Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Identity + concurrency / 16 сообщений из 16, страница 1 из 1
02.10.2019, 18:10
    #39870732
_human
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Identity + concurrency
Некая процерура делает инсерт в таблицу с identity
Все это в явной транзакции

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

begin tran
exec usp_tableA_Insert

select ident_current('dbo.A')

end tran
...
Рейтинг: 0 / 0
02.10.2019, 18:17
    #39870737
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Identity + concurrency
scope_identity()
...
Рейтинг: 0 / 0
02.10.2019, 18:19
    #39870738
_human
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Identity + concurrency
invm,

Пробовал,
К сожалению нет
...
Рейтинг: 0 / 0
02.10.2019, 18:25
    #39870742
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Identity + concurrency
_humanК сожалению нетЧто именно "нет"?
...
Рейтинг: 0 / 0
02.10.2019, 18:47
    #39870771
_human
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Identity + concurrency
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
...
Рейтинг: 0 / 0
02.10.2019, 18:50
    #39870777
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Identity + concurrency
Отлавливать надо в процедуре. В противном случае не решается в многопользовательской среде без сериализации вставки данных в таблице.
...
Рейтинг: 0 / 0
02.10.2019, 18:54
    #39870781
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Identity + concurrency
_human,

Что вы хотите сказать этой цитатой?
...
Рейтинг: 0 / 0
02.10.2019, 19:31
    #39870806
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Identity + concurrency
invm,

Он намекает, что ему scope_identity не подходит, потому что он пытается получить сгенерированное значение identity за скоупом.
...
Рейтинг: 0 / 0
02.10.2019, 19:45
    #39870814
_human
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Identity + concurrency
Спасибо, именно это имелось ввиду
Сейчас нет возможности написать нормальный семпл
но scope_identity() возвращает NULL
Идея поместить вызов процедуры в.явную транзакцию как я понимаю несработает
...
Рейтинг: 0 / 0
02.10.2019, 20:16
    #39870824
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Identity + concurrency
_human,

Понятно.
Самое простое - в процедуре записывать scope_identity во временную таблицу уровня сессии.
Один из минусов - для каждой сессии будет свой план выполнения этой процедуры.
...
Рейтинг: 0 / 0
02.10.2019, 21:04
    #39870851
_human
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Identity + concurrency
Ок, ещё такой вопрос
Человек вставляет в таблицу и ловит в @@identity
Какова вероятность что вернет не его identity?
...
Рейтинг: 0 / 0
02.10.2019, 21:30
    #39870861
Gerros
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Identity + concurrency
_humanКакова вероятность что вернет не его identity?@@identity чужого не возвращает. Просто не всем подходит айдишник от вставки, сделанной триггером...

если есть возможность изменить хранимку, добавьте в неё
Код: sql
1.
return scope_identity()

и забирайте его сами
Код: sql
1.
exec @id = usp_tableA_Insert
...
Рейтинг: 0 / 0
02.10.2019, 21:31
    #39870862
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Identity + concurrency
_humanЧеловек вставляет в таблицу и ловит в @@identity
Какова вероятность что вернет не его identity?Если подразумевается, что "не его" - это значение из другого сеанса, то нулевая.
Иначе, 100%, если у таблицы есть триггер, в котором тоже есть вставка в другую таблицу с identity.
...
Рейтинг: 0 / 0
02.10.2019, 22:06
    #39870869
_human
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Identity + concurrency
Gerrosесли есть возможность изменить хранимку, добавьте в неё
такого нет

invmЕсли подразумевается, что "не его" - это значение из другого сеанса
в теории может быть что апликация в 1-й сессии(@@spid) выполнит 500 процедур асинхронно
так что какой-то из @@identity вернет "чужой" ?
...
Рейтинг: 0 / 0
02.10.2019, 22:11
    #39870873
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Identity + concurrency
_humanтак что какой-то из @@identity вернет "чужой" ?Нет
...
Рейтинг: 0 / 0
02.10.2019, 23:06
    #39870880
Gerros
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Identity + concurrency
_humanапликация в 1-й сессии(@@spid) выполнит 500 процедур асинхронно ...SQL Server обслуживает команды внутри сессии синхронно. Прожевал - выплюнул. Прожевал - выплюнул. Романтика...
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Identity + concurrency / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]