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

时间:2013-04-21 19:47:38

标签: sql sql-server

我有两张桌子:

  • Rooms
    • ID(自动递增主键,int
    • Topicvarchar(50)
    • MangerIdvarchar(50)
  • Rooms_Users
    • UserIdvarchar(50)
    • RoomIdvarchar(50)
    • 两个字段一起是主键

我想插入一个房间,但我也必须将马槽插入到桌子rooms_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

?????????????是问题所在:我不知道该放什么,我想把上面插入的房间放在上面。

2 个答案:

答案 0 :(得分:3)

您可以使用output子句。在这里查看MSDN:OUTPUT Clause (Transact-SQL)

示例:

declare @tbl table
(
    NewID int
)

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

然后表变量将包含给你插入的行的新id

答案 1 :(得分:0)

使用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

此函数将返回此特定范围中最后插入的IDENTITY值 - 存储过程的范围。