2013-08-31 2 views
0

Я создаю хранимую процедуру в MS SQL SERVER 2008 для ввода клиентов. Вот важная часть моего кода:Как вставить IDENT_CURRENT на запрос INSERT?

INSERT INTO Entity VALUES (@nameEnt, @iniEnt, @LastNEnt1, @suffixEnt); 
INSERT INTO Patient VALUES (@housing, @dob, IDENT_CURRENT('Entity')); 
INSERT INTO Direction VALUES (@postAdd, @city, @state, @zip, IDENT_CURRENT('Entity')); 
INSERT INTO PatientSecure VALUES (IDENT_CURRENT('Patient'), @idSecure, @contractNo, @groupNo, @coverage) 

Это не работает, вероятно, потому, что я только видел IDENT_CURRENT используется на SELECT. Тем не менее, мне нужно сделать что-то подобное, которым идентичность, выработанный на Entity после первой строки в вставлен, быть на пациента таблице на строке идентичности, который должен быть же идентификатор генерируется на Объект. То же самое в Direction и PatientSecure.

Если есть лучший способ сделать это, предложите его.

Пожалуйста, помогите! и быть хорошим :) Thank you

+0

Помогли ли ответы? Они были хороши? Если да, то некоторая обратная связь будет уместна. Если нет, обратная связь по-прежнему подходит. – HABO

ответ

0

Обратите внимание, что IDENT_CURRENT возвращает значение, не зависящее от сеанса и области действия. Другой пользователь может привести к изменению значения между вашими заявлениями INSERT.

Вы можете использовать Scope_Identity():

declare @EntityId as Int; 
INSERT INTO Entity VALUES (@nameEnt, @iniEnt, @LastNEnt1, @suffixEnt); 
set @EntityId = Scope_Identity(); 
declare @PatientId as Int; 
INSERT INTO Patient VALUES (@housing, @dob, @EntityId); 
set @PatientId = Scope_Identity(); 
INSERT INTO Direction VALUES (@postAdd, @city, @state, @zip, @EntityId); 
INSERT INTO PatientSecure VALUES (@PatientId, @idSecure, @contractNo, @groupNo, @coverage) 

Или вы могли бы использовать OUTPUT положение на INSERT с, чтобы сохранить соответствующие значения. Хотя в этом случае это может быть излишним, это ценный инструмент для изучения. Он работает с операторами , INSERT и UPDATE, обрабатывает несколько строк и (если применимо) обеспечивает доступ к до и после значений.

0

Я бы сменил все ваши звонки на ident_current('some_table'), позвонив по номеру scope_identity().

+1

Поскольку значение идентификатора для 'Entity' используется дважды, а значение' Patient' используется после промежуточного 'INSERT', простая подстановка вряд ли даст правильные результаты. – HABO

+0

Вы правы; Я слишком быстро прочитал этот вопрос и предположил, что каждая последующая вставка использует значение идентификатора вставки перед ним. –

Смежные вопросы