powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / IDENT_CURRENT параллельный вызов процедур и некоторые траблы
11 сообщений из 11, страница 1 из 1
IDENT_CURRENT параллельный вызов процедур и некоторые траблы
    #39863292
BredSpit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
Есть некоторое приложение разбитое по потокам (не Service Broker) которое раз в секунду вызывает процедуры - каждый поток собственную процедуру
В одной из процедур используется IDENT_CURRENT для нахождения значения IDENTITY поля после вставки (код не мой, я обычно OUTPUT для таких вещей - не суть) Делаю высокую активность чтобы все это работало при высокой нагрузке Вижу проблемы с процедурой в которой юзается IDENT_CURRENT И подозреваю что IDENT_CURRENT возвращает какое то неверное значение (не соответствующее реалиям)
Вот псевдокод
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
insert into MyTable <список полей>
select <список>
select  @id = IDENT_CURRENT('MyTable')

<skipped>
<skipped>
<skipped>

update MyTable set поле1 = значение1,
                             поле2=значеие2
where ID = @id 

if @@rowcount<>1 
ОШИБКА 


И вот бывают случаи что логика вываливается на ошибку (@@rowcount<>1) А так как это в транзакции, процедура выполняется параллельно - апдейт начинает сканировать "не верные" диапазоны ключей и возникают всякие неприятные коллизии в т ч deadlock Но вот как раз первопричина этого неправильное значение выдаваемое IDENT_CURRENT - может быть такое? И поможет ли при этом замена на OUTPUT clause? Спрашиваю т к повторить эксперимент не могу так как стенд с приложением пока не работает, просто думаю над сложившейся ситуацией
Спасибо!
...
Рейтинг: 0 / 0
IDENT_CURRENT параллельный вызов процедур и некоторые траблы
    #39863299
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как обычно, документацию никто не читает https://docs.microsoft.com/ru-ru/sql/t-sql/functions/ident-current-transact-sql?view=sql-server-2017 Возврат последнего значения идентификатора, созданного для указанной таблицы или представления. Последнее созданное значение идентификатора может относиться к любому сеансу и любой области.
BredSpitможет быть такое?Да.
Лечится заменой на SCOPE_IDENTITY
...
Рейтинг: 0 / 0
IDENT_CURRENT параллельный вызов процедур и некоторые траблы
    #39863301
BredSpit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
invm Грешен - не читал ... Спасибо Не использую в коде IDENT_CURRENT
...
Рейтинг: 0 / 0
IDENT_CURRENT параллельный вызов процедур и некоторые траблы
    #39863307
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BredSpit invm Грешен - не читал ... Спасибо Не использую в коде IDENT_CURRENT

SCOPE_IDENTITY тоже не панацея.

Используйте output

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
create table #t(id int not null identity, f int not null)

declare @id int
declare @t table(id int not null)



insert #t(f)
output inserted.id 
into @t(id)
select 1

select @id = id
from @t


select @id 

drop table #t 
...
Рейтинг: 0 / 0
IDENT_CURRENT параллельный вызов процедур и некоторые траблы
    #39863311
BredSpit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
msLex Спасибо Тоже склоняюсь в сторону OUTPUT Читал(правда не для моего случая - а при параллелизме на серваке) что SCOPE_IDENTITY() может работать не корректно
...
Рейтинг: 0 / 0
IDENT_CURRENT параллельный вызов процедур и некоторые траблы
    #39863316
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BredSpitЧитал(правда не для моего случая - а при параллелизме на серваке) что SCOPE_IDENTITY() может работать не корректноПри параллелизме она работает корректно.
Проблемы будут в инстед-триггерах.
...
Рейтинг: 0 / 0
IDENT_CURRENT параллельный вызов процедур и некоторые траблы
    #39863339
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
msLexBredSpit invm Грешен - не читал ... Спасибо Не использую в коде IDENT_CURRENT

SCOPE_IDENTITY тоже не панацея.

Используйте output

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
create table #t(id int not null identity, f int not null)

declare @id int
declare @t table(id int not null)



insert #t(f)
output inserted.id 
into @t(id)
select 1

select @id = id
from @t


select @id 

drop table #t 

SCOPE_IDENTITY() и OUTPUT работают совершенно одинаково.
Если не считать, что OUTPUT может вернуть много вставленных строк, а не одну.
В том числе ни одно, ни другое не дадут вставленное IDENTITY, если есть триггер INSTEAD OF INSERT
...
Рейтинг: 0 / 0
IDENT_CURRENT параллельный вызов процедур и некоторые траблы
    #39863350
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iapSCOPE_IDENTITY() и OUTPUT работают совершенно одинаково.



srccreate table t (id int identity, f int )

declare @t table (id int identity(2,2), inserted_id int )

insert t
output inserted.id
into @t(inserted_id)
select 1

select [SCOPE_IDENTITY] = SCOPE_IDENTITY()
select * from @t


drop table t
...
Рейтинг: 0 / 0
IDENT_CURRENT параллельный вызов процедур и некоторые траблы
    #39863351
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iapSCOPE_IDENTITY() и OUTPUT работают совершенно одинаково.



Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
create table t (id int identity, f int ) 

declare @t table (id int identity(2,2), inserted_id int )

insert t 
output inserted.id
into @t(inserted_id)
select 1 

select [SCOPE_IDENTITY] = SCOPE_IDENTITY()
select * from @t


drop table t 
...
Рейтинг: 0 / 0
IDENT_CURRENT параллельный вызов процедур и некоторые траблы
    #39863353
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот, когда-то была тема (таких тем тут было видимо-невидимо!)
Ситуация с @@IDENTITY, помогите отловить
...
Рейтинг: 0 / 0
IDENT_CURRENT параллельный вызов процедур и некоторые траблы
    #39863404
BredSpit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо всем откликнувшимся
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / IDENT_CURRENT параллельный вызов процедур и некоторые траблы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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