J'avais le même besoin et j'ai trouvé cette réponse.
Cela crée un enregistrement dans la table d'entreprise (comp), il récupère l'ID automatique créé sur la table d'entreprise et le dépose dans une table Staff (staff) afin que les 2 tables puissent être liées, BEAUCOUP d'employés à UNE entreprise. Cela fonctionne sur ma base de données SQL 2008, devrait fonctionner sur SQL 2005 et au-dessus.
============================
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 l'entreprise 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 contenant le numéro d'identification généré automatiquement pour une utilisation ultérieure. Il n'a qu'un seul champ 'tempID' et son type INT est le même que '@recID' .
INSERT INTO comp(comp_name, comp_regno, comp_email)
OUTPUT inserted.comp_id INTO @tableVar
- Le ' OUTPUT inséré. La ligne ci-dessus est utilisée pour extraire des données de n'importe quel champ de l'enregistrement qu'il crée en ce moment. Ces données que nous voulons sont la numérotation automatique ID. Assurez-vous donc qu'il indique le nom de champ correct pour votre table, le mien est 'comp_id' . Ceci est ensuite déposé dans la table temporaire que nous avons créée précédemment.
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 précédemment où l'ID dont nous avons besoin est enregistré. Puisqu'il n'y a qu'un seul enregistrement dans cette table temporaire, et un seul champ, il ne sélectionnera que le numéro d'identification dont vous avez besoin et le déposera dans ' @recID '. ' @recID ' a maintenant le numéro d'identification que vous voulez et vous pouvez l'utiliser comme vous le souhaitez, comme je l'ai utilisé ci-dessous.
INSERT INTO staff(Staff_comp_id)
VALUES (@recID)
End
- Alors voilà. Vous pouvez en fait saisir ce que vous voulez dans la ligne 'OUTPUT INSERT.WhatEverFieldNameYouWant' et créer les champs que vous voulez dans votre table temporaire et y accéder pour l'utiliser comme vous le souhaitez.
Je cherchais quelque chose comme ça depuis des lustres, avec cette ventilation détaillée, j'espère que cela aide.
OUTPUT INSERTED.ID
pourrait générer un problème en cas de déclenchement actif sur la table