Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Проблема с Identity!
|
|||
|---|---|---|---|
|
#18+
Есть табица с Identity с кластерным индексом по полю. К ней определен триггер, который реагирует на Обновление и вставку - он запоминает старое значение некоторых полей в другой таблице другой базы(аудит) где тоже есть поле Identity. При встаке новой записи в исходную таблицу текущей записью станоится запись с Identity, которую вставил тригер в другой таблице. Как обойти? Подскажите. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2001, 16:27 |
|
||
|
Проблема с Identity!
|
|||
|---|---|---|---|
|
#18+
Извиняюсь - а чего обходить-то надо? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2001, 17:55 |
|
||
|
Проблема с Identity!
|
|||
|---|---|---|---|
|
#18+
Ты, случаем, не с клиента это делаешь? И не через ADO ли? Если (1) And (2) = True, тады скажу как обойти. Если <> True, формулируй проблему точнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2001, 18:02 |
|
||
|
Проблема с Identity!
|
|||
|---|---|---|---|
|
#18+
Я тоже, если честно, ничего не понял ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2001, 19:04 |
|
||
|
Проблема с Identity!
|
|||
|---|---|---|---|
|
#18+
Я использую встоенный клиент Enterrise Manager. Проблема в следующем: неправильно показывается позиционируется запись при вставке в таблицу из-за триггера. Т.к. клиент запрашивает (как я понял) последний вставленный Identity у сервера,тот ему честно возвращает его, но это не тот Identity - это Identity был втавлен при срабатывании триггера в другой базе. Может попробовать серверные курсоры использовать.Могу показать тело триггера, но оно очень простое и ничего корме вставки записи в другую таблицу нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2001, 09:41 |
|
||
|
Проблема с Identity!
|
|||
|---|---|---|---|
|
#18+
SQL ведет себя вполне предсказуемо и правильно - @@identity штука глобальная и если в таблице есть поле identity и триггер, который вызывает вставку во вторую таблицу тоже с полем identity, то в первом триггере вы получите неправильное значение identity. Кстати, если вы используете SQL 2K, то почитайте про SCOPE_IDENTITY и IDENT_CURRENT - насколько я знаю, это введено как раз для разрешения проблем такого рода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2001, 10:00 |
|
||
|
Проблема с Identity!
|
|||
|---|---|---|---|
|
#18+
Втом то и дело, что триггер то один. Я в клиенте неправильно вижу IDENTITY последней вставленной строчки, т.е. клиент после вставки отображает ту строчку, на которую показывает @@IDENTITY (это значение как раз и устанавливает триггер), в результате чего неправильно отображается информация. После рефреша в клиенте все отображается правильно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2001, 10:05 |
|
||
|
Проблема с Identity!
|
|||
|---|---|---|---|
|
#18+
А можно вопрос ? Кто такой "встроенный клиент Enterprise Manager" ? Имеется в виду сам EM или что-то еще ? Так если сам EM, то он глюкавый просто насквозь. Я им вообще стараюсь по минимуму пользоваться - QA гораздо надежнее и быстрее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2001, 11:25 |
|
||
|
Проблема с Identity!
|
|||
|---|---|---|---|
|
#18+
Неважно какой клиент (хотя в данном случае это EM), принцип получения последнего Identyti что у него, что у Access-го компонента (там тоже такая ситуация) один и тот же. Вот попробуй, создай таблицу с двумя полями, одно из которых Identyti(д.б. кючевое) в одной базе и создай такую же таблицу ( Identyti тоже в ней д.быть) в другой базе + напиши триггер на инсерт в первой таблице, так чтобы он записывал во вторую новое значение(запись) из таблицы inserted. Задача очень проста и банальна - аудит кто и когда меняет/добавляет записи в таблицу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2001, 11:44 |
|
||
|
Проблема с Identity!
|
|||
|---|---|---|---|
|
#18+
В начале триггера 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) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2001, 13:05 |
|
||
|
Проблема с Identity!
|
|||
|---|---|---|---|
|
#18+
Спасибо, вроде бы помогло ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2001, 13:59 |
|
||
|
Проблема с Identity!
|
|||
|---|---|---|---|
|
#18+
Павел подсказал правильно. Это глюк MS. Сразу после insert нужно ставить строку set @myIdentity=@@Identity а потом с ней работать. У нас человек в конторе ADO/C++ день бился из-за неправильного срабатывания триггера. Он сначала делал 1)AddNew, 2)rs.fields("pole1").value=.... 3)Update И триггер работал неправильно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2001, 16:49 |
|
||
|
|

start [/forum/topic.php?fid=46&gotonew=1&tid=1826811]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
26ms |
get topic data: |
7ms |
get first new msg: |
5ms |
get forum data: |
2ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
| others: | 263ms |
| total: | 368ms |

| 0 / 0 |
