Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Функция scope_identity() работает не корректно ...  [new]
NAE
Guest
Есть две таблицы Operation(главная) и SubOperation(подчиненная). И еще две такие же таблицы которые выполняют функцию временых таблиц для хранения вновь введенных документов. После некоторых действий запускается хранимая процедура которая переносит операции из временных таблиц в постоянные.
Ключевые поля Operation_ID и SubOperation_ID типа IDENTITY(1,1) и естественно генерируются автоматически при вставке новой записи.
Что бы не нарушать целостность при переносе надо вычислить ID записи главной таблицы после вставки( при помощи scope_identity() ) и подставить этот ID в подчиненную таблицу (.. для записей из временных таблиц).

Текст хранимой процедуры.

begin
insert into Operation
select Operation_Date,Registration_Date,Article_ID,DocumentType_ID,Document_Num,
KontrAgent_ID,Discription,Period_ID,Plan_Emp_ID,Fact_Emp_ID,Summa,Base
from Operation_Tmp
where Operation_ID=@Operation_ID_Tmp

insert into SubOperation
select scope_identity(),Activity_Type_ID,Center_Zatrat_ID,Summa
from SubOperation_Tmp
where Operation_ID=@Operation_ID_Tmp

delete from Operation_Tmp
where Operation_ID=@Operation_ID_Tmp
....
....
end

Проблема в том что первый insert выполняется, второй insert тоже выполняется корректно, а запросы стоящие далее не выполняются без кокого-либо сообщения об ошибке. Просто не выполняются. Может scope_identity() блокирует записи?
Все запросы надо выполнить в одной транзакции, чтобы иметь возможность отменить перенос.
Интересно, что если вместо insert'ов делать просто select'ы, то все запросы выполняются. В чем проблема? Подскажите, может кто сталкивался.
17 янв 03, 14:25    [108749]     Ответить | Цитировать Сообщить модератору
 Re: Функция scope_identity() работает не корректно ...  [new]
Pavel
Member

Откуда: Кемерово
Сообщений: 2435
Попробуй в начале процедуры поставить Set Nocount On
17 янв 03, 14:30    [108756]     Ответить | Цитировать Сообщить модератору
 Re: Функция scope_identity() работает не корректно ...  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31623
Что-то вы не договариваете... С таким синтаксисом:
insert into Operation
select Operation_Date, Registration_Date, ...
e dfc вообще ничего не вставится.
В Operation и SubOperation есть IDENTITY-поле, так-что без перечисления полей в инсёрте не обойтись...
17 янв 03, 14:59    [108785]     Ответить | Цитировать Сообщить модератору
 Re: Функция scope_identity() работает не корректно ...  [new]
NAE
Guest
Для Pavel:
Попробовал ваш совет-не помогло.

Для alexeyvg:
(Что-то вы не договариваете... С таким синтаксисом:
insert into Operation
select Operation_Date, Registration_Date, ...
e dfc вообще ничего не вставится. )

Еще как вставится.

(В Operation и SubOperation есть IDENTITY-поле, так-что без перечисления полей в инсёрте не обойтись...)

В insert'е надо перечислить поля, которые явно нужно задать. IDENTITY сгенерится само. Ведь когда вы ручками вставляете запить в таблицу у которой первое поле IDENTITY, вы начинаете заполнять со второго поля и тд.
Или я уже совсем ничего не понимаю в MSSQL.
17 янв 03, 15:13    [108808]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить