2013-04-21 68 views
2

什麼樣的價值我有兩個表:查找插入自動遞增的字段

  • 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 

?????????????的問題是:我不知道要放什麼東西在這裏,我希望把我roomid上面插入。

+2

在這種情況下,您可以使用[Scope_Identity()](http://msdn.microsoft.com/en-us/library/ms190315.aspx?ppud=4)。你應該明智地聽取Aweis的建議,並瞭解處理許多其他情況的'輸出'條款。 – HABO 2013-04-21 19:59:24

+0

Scope_Identity()幫助了我很多,並且iam將學習輸出子句以獲得更好更好的效果:) – 2013-04-21 20:03:13

+0

可能的重複[如何獲得插入時最後一行的自動增量值](http:// stackoverflow.com/questions/13451070/how-to-get-the-value-of-autoincrement-of-last-row-at-the-insert) – Pondlife 2013-04-22 14:19:51

回答

0

使用SCOPE_IDENTITY()功能該行的新ID:

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值 - 存儲過程的範圍。

+0

這是一個很好的答案,非常感謝 – 2013-04-21 20:03:58

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) 

那麼表變量將包含提供給您插入

+0

+1,但你應該提到它不適用於桌子與觸發器。 – jmoreno 2014-01-05 07:34:22