У меня была такая же потребность и я нашел этот ответ ..
Это создает запись в таблице компании (comp), она захватывает автоматический идентификатор, созданный в таблице компании, и помещает его в таблицу персонала (персонала), чтобы можно было связать 2 таблицы, МНОГО сотрудников из ОДНОЙ компании. Он работает на моей базе данных SQL 2008, должен работать на SQL 2005 и выше.
===========================
CREATE PROCEDURE [dbo].[InsertNewCompanyAndStaffDetails]
@comp_name varchar(55) = 'Big Company',
@comp_regno nchar(8) = '12345678',
@comp_email nvarchar(50) = 'no1@home.com',
@recID INT OUTPUT
- @recID используется для хранения автоматически сгенерированного идентификационного номера Компании, который мы собираемся получить.
AS
Begin
SET NOCOUNT ON
DECLARE @tableVar TABLE (tempID INT)
- Строка выше используется для создания временной таблицы для хранения автоматически сгенерированного идентификационного номера для последующего использования. Он имеет только одно поле 'tempID', а его тип INT совпадает с '@recID' .
INSERT INTO comp(comp_name, comp_regno, comp_email)
OUTPUT inserted.comp_id INTO @tableVar
- ВЫХОД вставлен. 'строка выше используется для извлечения данных из любого поля в записи, которую он создает прямо сейчас. Эти данные, которые мы хотим, являются идентификатором autonumber. Поэтому убедитесь, что в нем указано правильное имя поля для вашей таблицы, у меня 'comp_id' . Затем он помещается в таблицу временных показателей, которую мы создали ранее.
VALUES (@comp_name, @comp_regno, @comp_email)
SET @recID = (SELECT tempID FROM @tableVar)
- Приведенная выше строка используется для поиска в таблице темпораций, которую мы создали ранее, где сохранен нужный нам идентификатор. Поскольку в этой таблице временных данных есть только одна запись и только одно поле, она выберет только тот номер ID, который вам нужен, и поместит его в @recID . « @recID » теперь имеет желаемый идентификационный номер, и вы можете использовать его так, как хотите, как я использовал ниже.
INSERT INTO staff(Staff_comp_id)
VALUES (@recID)
End
- Итак, поехали. На самом деле вы можете получить то, что вы хотите, в строке «OUTPUT вставлен. WhatEverFieldNameYouWant » и создать поля, которые вы хотите в своей таблице временных данных, и получить к ним доступ, чтобы использовать их, как вам угодно.
Я искал что-то подобное целую вечность, с этим подробным описанием, надеюсь, это поможет.
OUTPUT INSERTED.ID
может вызвать проблемы в случае активного триггера на столе