Tenía la misma necesidad y encontré esta respuesta ...
Esto crea un registro en la tabla de la compañía (comp), toma la identificación automática creada en la tabla de la compañía y la coloca en una tabla de Personal (staff) para que las 2 tablas puedan vincularse, MUCHOS empleados a UNA compañía. Funciona en mi base de datos SQL 2008, debería funcionar en SQL 2005 y superior.
===========================
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
- El ' @recID' se usa para mantener el número de identificación generado automáticamente por la Compañía que estamos a punto de obtener
AS
Begin
SET NOCOUNT ON
DECLARE @tableVar TABLE (tempID INT)
- La línea anterior se usa para crear una tabla temporal para contener el número de ID generado automáticamente para su uso posterior. Solo tiene un campo 'tempID' y su tipo INT es el mismo que '@recID' .
INSERT INTO comp(comp_name, comp_regno, comp_email)
OUTPUT inserted.comp_id INTO @tableVar
-- Los ' SALIDA insertada. La línea anterior se utiliza para capturar datos de cualquier campo en el registro que está creando en este momento. Estos datos que queremos son el número de identificación automático. Así que asegúrese de que diga el nombre de campo correcto para su tabla, el mío es 'comp_id' . Esto se deja caer en la tabla temporal que creamos anteriormente.
VALUES (@comp_name, @comp_regno, @comp_email)
SET @recID = (SELECT tempID FROM @tableVar)
- La línea de arriba se usa para buscar en la tabla temporal que creamos anteriormente donde se guarda la ID que necesitamos. Como solo hay un registro en esta tabla temporal, y solo un campo, solo seleccionará el número de ID que necesita y lo colocará en ' colocará @recID '. ' @recID ' ahora tiene el número de identificación que deseas y puedes usarlo como quieras como lo he usado a continuación.
INSERT INTO staff(Staff_comp_id)
VALUES (@recID)
End
-- Ahí vas. En realidad, puedes tomar lo que quieras en el 'OUTPUT insertado. WhatEverFieldNameYouWant' y crear los campos que desee en su tabla temporal y acceder a ellos para usarlos como quiera.
Estuve buscando algo así por años, con este desglose detallado, espero que esto ayude.
OUTPUT INSERTED.ID
podría generar un problema en caso de un activador activo en la mesa