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)
) 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