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,但您应该提到,它在带有触发器的表上不起作用。