Sql 查找插入到自动递增字段中的值

Sql 查找插入到自动递增字段中的值,sql,sql-server,Sql,Sql Server,我有两张桌子: 房间: ID(自动递增主键,int) 主题(varchar(50)) MangerId(varchar(50)) 房间\u用户: UserId(varchar(50)) RoomId(varchar(50)) 两个字段一起是主键 我想插入一个房间,但我还必须将经理插入表rooms\u users 以下是我到目前为止的情况: ALTER PROCEDURE [dbo].[Creat_Room] @MangerId varchar(50) ,@Topic varchar

我有两张桌子:

  • 房间
    • ID
      (自动递增主键,
      int
    • 主题
      varchar(50)
    • MangerId
      varchar(50)
  • 房间\u用户
    • UserId
      varchar(50)
    • RoomId
      varchar(50)
    • 两个字段一起是主键
我想插入一个房间,但我还必须将经理插入表
rooms\u users

以下是我到目前为止的情况:

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

问题出在
?????
上:我不知道在这里放什么,我想把我插入的房间ID放在上面。

您可以使用
输出
子句。请看这里的MSDN:

例如:

declare @tbl table
(
    NewID int
)

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

然后table变量将包含为插入的行指定的新id

使用
SCOPE\u 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

此函数将返回此特定范围(存储过程的范围)中最后插入的
标识值。

在这种情况下,您可以使用。您最好听从aweis的建议,学习处理许多其他情况的
output
子句。Scope_Identity()对我帮助很大,我将学习output子句以便变得越来越好:)可能重复+1,但您应该提到,它在带有触发器的表上不起作用。