Eu tive a mesma necessidade e encontrei esta resposta ..
Isso cria um registro na tabela da empresa (comp), ele pega o ID automático criado na tabela da empresa e o solta em uma tabela da equipe (equipe) para que as duas tabelas possam ser vinculadas, MUITAS equipes a UMA empresa. Funciona no meu banco de dados SQL 2008, deve funcionar no SQL 2005 e acima.
===========================
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
- O ' @recID' é usado para armazenar o número de ID gerado automaticamente pela empresa que estamos prestes a obter
AS
Begin
SET NOCOUNT ON
DECLARE @tableVar TABLE (tempID INT)
- A linha acima é usada para criar uma tabela temporária para armazenar o número de ID gerado automaticamente para uso posterior. Ele possui apenas um campo 'tempID' e seu tipo INT é igual ao '@recID' .
INSERT INTO comp(comp_name, comp_regno, comp_email)
OUTPUT inserted.comp_id INTO @tableVar
- A ' SAÍDA inserida. A linha acima é usada para capturar dados de qualquer campo no registro que está criando no momento. Esses dados que queremos é o número automático de ID. Portanto, verifique se ele diz o nome do campo correto para sua tabela, a minha é 'comp_id' . Isso é descartado na tabela temporária que criamos anteriormente.
VALUES (@comp_name, @comp_regno, @comp_email)
SET @recID = (SELECT tempID FROM @tableVar)
- A linha acima é usada para pesquisar a tabela temporária que criamos anteriormente, onde o ID que precisamos é salvo. Como existe apenas um registro nessa tabela temporária e apenas um campo, ele selecionará apenas o número de identificação necessário e o soltará em ' @recID '. ' @recID ' agora tem o número de identificação desejado e você pode usá-lo como quiser, como eu o usei abaixo.
INSERT INTO staff(Staff_comp_id)
VALUES (@recID)
End
- Então lá vai você. Você pode realmente pegar o que quiser na linha 'OUTPUT inserida. WhatEverFieldNameYouWant ' e criar os campos que deseja na sua tabela temporária e acessá-lo para usar como quiser.
Eu estava procurando por algo assim há muito tempo, com essa quebra detalhada, espero que isso ajude.
OUTPUT INSERTED.IDpoderia gerar problema no caso de um gatilho ativo na mesa