J'avais le même besoin et j'ai trouvé cette réponse
Cela crée un enregistrement dans la table de la société (comp), il prend l'auto ID créé sur la table de la société et le dépose dans une table du personnel (staff) afin que les 2 tables puissent être liées, beaucoup de personnel à UNE société. Cela fonctionne sur ma base de données SQL 2008, cela devrait fonctionner sur SQL 2005 et plus.
\===========================
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
-- Le ' @recID est utilisé pour contenir le numéro d'identification généré automatiquement par la société que nous sommes sur le point de saisir.
AS
Begin
SET NOCOUNT ON
DECLARE @tableVar TABLE (tempID INT)
-- La ligne ci-dessus est utilisée pour créer une table temporaire pour contenir le numéro d'identification généré automatiquement pour une utilisation ultérieure. Il n'y a qu'un seul champ 'tempID' et son type est INT est le même que le @recID .
INSERT INTO comp(comp_name, comp_regno, comp_email)
OUTPUT inserted.comp_id INTO @tableVar
-- Le ' Sortie insérée. La ligne '' ci-dessus est utilisée pour extraire des données de n'importe quel champ de l'enregistrement qu'elle est en train de créer. La donnée que nous voulons est le numéro d'identification automatique. Donc assurez-vous que le nom du champ est correct pour votre table, le mien est comp_id . Il est ensuite déposé dans la table temporaire que nous avons créée plus tôt.
VALUES (@comp_name, @comp_regno, @comp_email)
SET @recID = (SELECT tempID FROM @tableVar)
-- La ligne ci-dessus est utilisée pour rechercher la table temporaire que nous avons créée plus tôt, où l'ID dont nous avons besoin est enregistré. Comme il n'y a qu'un seul enregistrement dans cette table temporaire, et qu'un seul champ, elle ne sélectionnera que le numéro d'identification dont vous avez besoin et le déposera dans ' @recID '. ' @recID Vous pouvez l'utiliser comme vous le souhaitez, comme je l'ai fait ci-dessous.
INSERT INTO staff(Staff_comp_id)
VALUES (@recID)
End
-- Donc voilà. Vous pouvez en fait prendre ce que vous voulez dans le OUTPUT inserted.WhatEverFieldNameYouWant' (Sortie insérée.Quel que soit le nom du champ que vous voulez) et créez les champs que vous voulez dans votre table temporaire et accédez-y pour l'utiliser comme vous le voulez.
J'ai cherché quelque chose comme ça pendant des années, avec cette décomposition détaillée, j'espère que cela vous aidera.