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

Откуда: Москва
Сообщений: 1869
Вот здесь Crimean высказал следующее:
Crimean
Вообще-то триггера оч интересно "херят" @@identity / scope_identity() , но с этим можно бороться...

Проблема то понятна, и она мешает жить при вставках через ADO в таблицу, триггер на которой делает INSERT в другую таблицу.
Собственно вопрос у меня вызвало вот это:
Crimean
с этим можно бороться...

Как? Если после INSERT'а в таблицу OLE DB-провайдер гонит SELECT @@identity?
7 окт 04, 09:55    [1014889]     Ответить | Цитировать Сообщить модератору
 Re: Про @@identity и триггеры...  [new]
Nikolay M.
Member

Откуда:
Сообщений: 62
SET NOCOUNT ON
имеется ввиду?
7 окт 04, 09:59    [1014906]     Ответить | Цитировать Сообщить модератору
 Re: Про @@identity и триггеры...  [new]
SysRq
Member

Откуда: Москва
Сообщений: 1869
Nikolay M.
SET NOCOUNT ON
имеется ввиду?

Нет.
7 окт 04, 10:03    [1014930]     Ответить | Цитировать Сообщить модератору
 Re: Про @@identity и триггеры...  [new]
Glory
Member

Откуда:
Сообщений: 104760
Как? Если после INSERT'а в таблицу OLE DB-провайдер гонит SELECT @@identity?
В триггере сначала запоминается @@identity текущей таблицы, а в конце создается временная таблица с identity начинающимся с записанного значения и делается один insert. Так что select @@identity после окончания триггера вернет правильное значение.
7 окт 04, 10:08    [1014950]     Ответить | Цитировать Сообщить модератору
 Re: Про @@identity и триггеры...  [new]
SysRq
Member

Откуда: Москва
Сообщений: 1869
Glory

В триггере сначала запоминается @@identity текущей таблицы, а в конце создается временная таблица с identity начинающимся с записанного значения и делается один insert. Так что select @@identity после окончания триггера вернет правильное значение.

Ух блин! :-)
Спасибо!

ЗЫ. Вообще то можно было догадаться!
7 окт 04, 10:18    [1015007]     Ответить | Цитировать Сообщить модератору
 Re: Про @@identity и триггеры...  [new]
Crimean
Member

Откуда:
Сообщений: 13148
А есть для этого решения, более красивые, чем

declare @i int
select @i = 123456
declare @s varchar(8000)
select @s = 'declare @a table ( id int identity('+str( @i )+',1), flag int ) insert into @a ( flag ) select 1 '
exec( @s )
select @@identity
7 окт 04, 12:06    [1015437]     Ответить | Цитировать Сообщить модератору
 Re: Про @@identity и триггеры...  [new]
guest00x
Guest
>А есть для этого решения, более красивые, чем
Есть
declare @i int
select @i = 123456
select @i+1
:))
7 окт 04, 12:15    [1015485]     Ответить | Цитировать Сообщить модератору
 Re: Про @@identity и триггеры...  [new]
Crimean
Member

Откуда:
Сообщений: 13148
2 guest00x

Ээээ, а как твой код с @@identity связать?
7 окт 04, 12:19    [1015507]     Ответить | Цитировать Сообщить модератору
 Re: Про @@identity и триггеры...  [new]
guest00x
Guest
2 Crimean
Да шутка это была, не обижайся.

А если серьезно, то если нельзя настроить OLE DB-провайдер, чтобы он "гнал" SCOPE_IDENTITY, то лучшим видится использовать GUID вместо identity для идентификации записи, IMHO.
7 окт 04, 12:54    [1015700]     Ответить | Цитировать Сообщить модератору
 Re: Про @@identity и триггеры...  [new]
Crimean
Member

Откуда:
Сообщений: 13148
scope - не выход. После instead триггеров там NULL
7 окт 04, 13:26    [1015882]     Ответить | Цитировать Сообщить модератору
 Re: Про @@identity и триггеры...  [new]
guest00x
Guest
Есть еще вариант блокировать таблицу для использования IDENT_CURRENT :))
7 окт 04, 13:38    [1015957]     Ответить | Цитировать Сообщить модератору
 Re: Про @@identity и триггеры...  [new]
Makar4ik
Member

Откуда: Когда-то были Лужки, а теперь Бордюр-Сити.
Сообщений: 2676
guest00x
Есть еще вариант блокировать таблицу для использования IDENT_CURRENT :))


Угу.
Типа, новая фича.
MS хвастался, что в MSSQL 7.0 наконец-то хоть как-то научились не блокировать страницу целиком. И вот наш "ответ Чемберлену"!
7 окт 04, 13:59    [1016091]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить