Trouver quelle valeur a été insérée dans un champ auto-incrémenté

J'ai deux tables:

  • Rooms :
    • ID (key primaire auto-incrémentée, int )
    • Topic ( varchar(50) )
    • MangerId ( varchar(50) )
  • Rooms_Users :
    • UserId ( varchar(50) )
    • RoomId ( varchar(50) )
    • les deux champs set sont la key primaire

Je veux insert une pièce mais je dois aussi insert la mangeoire à la table rooms_users .

Voici ce que j'ai jusqu'ici:

 ALTER PROCEDURE [dbo].[Creat_Room] @MangerId varchar(50) ,@Topic varchar(50) AS BEGIN SET NOCOUNT insert into Rooms(ManagerId,Topic) values(@MangerId,@Topic) insert into Rooms_Users(UserId,RoomId) values(@MangerId,?????????????) END 

Le ????????????? est le problème: je ne sais pas quoi mettre ici je veux mettre le roomid je l'insère ci-dessus.

Utilisez la fonction SCOPE_IDENTITY() :

 ALTER PROCEDURE [dbo].[Create_Room] @ManagerId varchar(50), @Topic varchar(50) AS BEGIN DECLARE @NewRoomID INT insert into Rooms(ManagerId, Topic) values(@MangerId, @Topic) SELECT @NewRoomID = SCOPE_IDENTITY() insert into Rooms_Users(UserId, RoomId) values(@ManagerId, @NewRoomID) END 

Cette fonction renverra la dernière valeur IDENTITY insérée dans cette scope particulière – la scope de votre procédure stockée.

Vous pouvez utiliser la clause de output . Regardez MSDN ici: Clause OUTPUT (Transact-SQL)

Exemple:

 declare @tbl table ( NewID int ) insert into Rooms(ManagerId,Topic) output inserted.ID into @tbl values(@MangerId,@Topic) 

Ensuite, la variable table contiendra le nouvel identifiant donné à la ligne que vous avez insérée