Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Проблема с Identity! / 12 сообщений из 12, страница 1 из 1
07.05.2001, 16:27
    #32005256
Sergy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с Identity!
Есть табица с Identity с кластерным индексом по полю. К ней определен триггер, который реагирует на Обновление и вставку - он запоминает старое значение некоторых полей в другой таблице другой базы(аудит) где тоже есть поле Identity. При встаке новой записи в исходную таблицу текущей записью станоится запись с Identity, которую вставил тригер в другой таблице. Как обойти? Подскажите.
...
Рейтинг: 0 / 0
07.05.2001, 17:55
    #32005260
SergSuper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с Identity!
Извиняюсь - а чего обходить-то надо?
...
Рейтинг: 0 / 0
07.05.2001, 18:02
    #32005261
Павел
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с Identity!
Ты, случаем, не с клиента это делаешь? И не через ADO ли? Если (1) And (2) = True, тады скажу как обойти. Если <> True, формулируй проблему точнее.
...
Рейтинг: 0 / 0
07.05.2001, 19:04
    #32005265
Alexander Chepack
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с Identity!
Я тоже, если честно, ничего не понял ...
...
Рейтинг: 0 / 0
08.05.2001, 09:41
    #32005295
Sergy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с Identity!
Я использую встоенный клиент Enterrise Manager. Проблема в следующем: неправильно показывается позиционируется запись при вставке в таблицу из-за триггера. Т.к. клиент запрашивает (как я понял) последний вставленный Identity у сервера,тот ему честно возвращает его, но это не тот Identity - это Identity был втавлен при срабатывании триггера в другой базе. Может попробовать серверные курсоры использовать.Могу показать тело триггера, но оно очень простое и ничего корме вставки записи в другую таблицу нет.
...
Рейтинг: 0 / 0
08.05.2001, 10:00
    #32005298
GreenSunrise
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с Identity!
SQL ведет себя вполне предсказуемо и правильно - @@identity штука глобальная и если в таблице есть поле identity и триггер, который вызывает вставку во вторую таблицу тоже с полем identity, то в первом триггере вы получите неправильное значение identity. Кстати, если вы используете SQL 2K, то почитайте про SCOPE_IDENTITY и IDENT_CURRENT - насколько я знаю, это введено как раз для разрешения проблем такого рода.
...
Рейтинг: 0 / 0
08.05.2001, 10:05
    #32005299
Sergy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с Identity!
Втом то и дело, что триггер то один. Я в клиенте неправильно вижу IDENTITY последней вставленной строчки, т.е. клиент после вставки отображает ту строчку, на которую показывает @@IDENTITY (это значение как раз и устанавливает триггер), в результате чего неправильно отображается информация. После рефреша в клиенте все отображается правильно.
...
Рейтинг: 0 / 0
08.05.2001, 11:25
    #32005310
GreenSunrise
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с Identity!
А можно вопрос ? Кто такой "встроенный клиент Enterprise Manager" ? Имеется в виду сам EM или что-то еще ? Так если сам EM, то он глюкавый просто насквозь. Я им вообще стараюсь по минимуму пользоваться - QA гораздо надежнее и быстрее.
...
Рейтинг: 0 / 0
08.05.2001, 11:44
    #32005313
Sergy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с Identity!
Неважно какой клиент (хотя в данном случае это EM), принцип получения последнего Identyti что у него, что у Access-го компонента (там тоже такая ситуация) один и тот же. Вот попробуй, создай таблицу с двумя полями, одно из которых Identyti(д.б. кючевое) в одной базе и создай такую же таблицу ( Identyti тоже в ней д.быть) в другой базе + напиши триггер на инсерт в первой таблице, так чтобы он записывал во вторую новое значение(запись) из таблицы inserted. Задача очень проста и банальна - аудит кто и когда меняет/добавляет записи в таблицу.
...
Рейтинг: 0 / 0
08.05.2001, 13:05
    #32005324
Павел
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с Identity!
В начале триггера On Insert:

Declare @Idt Int, @s Varchar(50)
Set @Idt = @@Identity

В конце:

Set @s = 'Select Identity(Int, ' + Cast(@Idt As VarChar(10)) +' ,1) As idt Into #Tmp'
Execute(@s)
...
Рейтинг: 0 / 0
08.05.2001, 13:59
    #32005332
Sergy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с Identity!
Спасибо, вроде бы помогло
...
Рейтинг: 0 / 0
11.05.2001, 16:49
    #32005506
Гена
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с Identity!
Павел подсказал правильно.
Это глюк MS. Сразу после insert нужно ставить строку

set @myIdentity=@@Identity
а потом с ней работать. У нас человек в конторе ADO/C++ день бился из-за неправильного срабатывания триггера. Он сначала делал 1)AddNew, 2)rs.fields("pole1").value=.... 3)Update
И триггер работал неправильно
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Проблема с Identity! / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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