Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Уважаемые господа профи...
|
|||
|---|---|---|---|
|
#18+
как корректно узнать значение identity вставленной записи? спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2001, 12:59 |
|
||
|
Уважаемые господа профи...
|
|||
|---|---|---|---|
|
#18+
@@IDENTITY ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2001, 13:09 |
|
||
|
Уважаемые господа профи...
|
|||
|---|---|---|---|
|
#18+
Только запрашивай сразу после вставки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2001, 13:20 |
|
||
|
Уважаемые господа профи...
|
|||
|---|---|---|---|
|
#18+
огромное спасибо. если использовать код insert .... SELECT @NewID=@@IDENTITY в stored proc, можно ли гарантировать, что в @NewID запишется результат "моего" инсерта? еще раз thanx ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2001, 13:25 |
|
||
|
Уважаемые господа профи...
|
|||
|---|---|---|---|
|
#18+
2 Павел: спасибо, сразу не увидел твой месаг ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2001, 13:27 |
|
||
|
Уважаемые господа профи...
|
|||
|---|---|---|---|
|
#18+
А вот гарантировать, что получишь результат именно последнего ЯВНОГО insert'а, не всегда возможно. Например, если у тебя сработают триггера, которые делают вставки в таблицы, содержащие identity поля, то в @@identity получишь результат последней операции, а не своей явной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2001, 14:38 |
|
||
|
Уважаемые господа профи...
|
|||
|---|---|---|---|
|
#18+
Что-бы гарантировать, что получишь результат именно последнего ЯВНОГО insert'а, в SQL2000 можно использовать функцию SCOPE_IDENTITY() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2001, 16:28 |
|
||
|
Уважаемые господа профи...
|
|||
|---|---|---|---|
|
#18+
А если речь идет о семерке, то в контексте триггера на вставку гарантия 100% ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2001, 16:54 |
|
||
|
Уважаемые господа профи...
|
|||
|---|---|---|---|
|
#18+
Это смотря в каком месте триггера @@identity запросить Вот пример: create table t1( col1 int identity(1, 1), col2 sysname ) create table t2( col1 int identity(1, 1), col2 sysname ) create trigger ins_t1 on t1 for insert as print @@identity insert into t2 values (123) print @@identity insert into t2 values (456) insert into t2 values (456) insert into t1 values (123) В распечатке мы увидим 1 3 Так что в начале триггера, наверное, можно запрашивать, а вот в конце не стОит. Ну и ясное дело, после отработки последнего инсерта @@identity уже покореженное, так что писать insert into t1 values (123) select @@identity нельзя в принципе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2001, 18:47 |
|
||
|
Уважаемые господа профи...
|
|||
|---|---|---|---|
|
#18+
Стоит сразу после insert ... Мне интересно , само увеличение identity таблицы осуществляется SQL Server-ом каким методом ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2001, 14:49 |
|
||
|
Уважаемые господа профи...
|
|||
|---|---|---|---|
|
#18+
Уважаемые, позвольте вмешаться. Я так понимаю, вопрос звучал "как корректно узнать значение identity вставленной записи?" А нельзя ли вот таким макаром: BEGIN TRAN INSERT INTO Tab1 ............ SET @NewID=(SELECT MAX(ID_Field) FROM Tab1) COMMIT TRAN Ясное дело, что по ID_Field - кластерный "примари кей" . Я использую именно этот метод. Пока не подводил. ЗЫ. Работаю с 7.0, может в 2000 есть что-то особенное и специфическое - не знаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2001, 13:27 |
|
||
|
Уважаемые господа профи...
|
|||
|---|---|---|---|
|
#18+
2 AnKa >BEGIN TRAN >INSERT INTO Tab1 >............ >SET @NewID=(SELECT MAX(ID_Field) FROM Tab1) А если у Вас в Tab1 много записей? И insert-ы встречаются часто и юзеров работающих одновременно много? То совсем не завидую Вашим юзерам, думаю им не очень понравиться отпад по timeout-у >COMMIT TRAN >Ясное дело, что по ID_Field - кластерный "примари кей" Если использовать identity field, то сразу после вставки смотреть переменную @@idenyity, а если самому это identity генерить, то соответственно и свой счетчик должен быть, поиск MAX неэффективное решение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2001, 05:41 |
|
||
|
Уважаемые господа профи...
|
|||
|---|---|---|---|
|
#18+
Вообще IMHO надо заставлять себя в первой строке каждого триггера который делает какие-либо insert'ы (а может лучше вообще в каждом - чтоб привыкнуть) писать SET NOCOUNT ON тогда SELECT @@IDENTITY всегда будет возвращать правильное значение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2001, 09:39 |
|
||
|
Уважаемые господа профи...
|
|||
|---|---|---|---|
|
#18+
Ну и чем тебе поможет set nocount on ? В моем примере (см. выше) добавление set nocount on ничего не изменило в поведении @@identity. insert into t1 values (111) select @@identity по-прежнему будет возвращать @@identity, не соответствующую id записи, вставленной в t1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2001, 09:53 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32011196&tid=1825966]: |
0ms |
get settings: |
11ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
46ms |
get topic data: |
13ms |
get forum data: |
4ms |
get page messages: |
72ms |
get tp. blocked users: |
2ms |
| others: | 235ms |
| total: | 410ms |

| 0 / 0 |
