У меня была такая же потребность и я нашел этот ответ ..
Это создает запись в таблице компании (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
- строка ' OUTPUT вставлена. ' выше используется для извлечения данных из любого поля в записи, которую он создает прямо сейчас. Эти данные, которые мы хотим, являются идентификатором autonumber. Поэтому убедитесь, что в нем указано правильное имя поля для вашей таблицы, у меня 'comp_id' . Затем он помещается в таблицу временных показателей, которую мы создали ранее.
VALUES (@comp_name, @comp_regno, @comp_email)
SET @recID = (SELECT tempID FROM @tableVar)
- Строка выше используется для поиска таблицы темпораций, которую мы создали ранее, в которой сохранен нужный нам идентификатор. Поскольку в этой таблице временных данных есть только одна запись и только одно поле, он выберет только тот идентификационный номер, который вам нужен, и поместит его в ' @ recID '. ' @ recID ' теперь имеет желаемый идентификационный номер, и вы можете использовать его так, как хотите, как я использовал его ниже.
INSERT INTO staff(Staff_comp_id)
VALUES (@recID)
End
- Итак, поехали. На самом деле вы можете получить все, что вы хотите, в строке 'OUTPUT
Я искал что-то подобное целую вечность, с этим подробным анализом, надеюсь, это поможет.