在表上插入记录后返回自动增量值

时间:2014-04-24 14:38:46

标签: sql sql-server sql-server-2012

这是我的查询。在我的表用户中,模式是

    CREATE TABLE [dbo].[User](
        [UserId] [int] IDENTITY(1,1) NOT NULL,
        [UserFirstName] [nchar](33) NOT NULL,
        [UserSurname] [nchar](33) NOT NULL,
        [UserDob] [date] NULL,
    CONSTRAINT [PK_User] PRIMARY KEY CLUSTERED 
    (
        [UserId] ASC
    )
    WITH (PAD_INDEX = OFF, 
        STATISTICS_NORECOMPUTE = OFF, 
        IGNORE_DUP_KEY = OFF, 
        ALLOW_ROW_LOCKS = ON, 
        ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    ) ON [PRIMARY]

我想要做的是在创建新记录时插入userFirstName,userSurname和UserDob时自动设置UserId。

我希望使用它在另一个表中生成的userId,sqlserver的语法是什么。

我打算从c#和asp.net

调用上述信息

4 个答案:

答案 0 :(得分:1)

这样的东西?使用SCOPE_IDENTITY而不是IDENTITY。

DECLARE @NewID int

INSERT INTO User ([UserFirstName], [UserSurname], [UserDob]) Values ('Bob', 'Smith', '1979-01-01')

Select @NewID = SCOPE_IDENTITY()


INSERT INTO OtherTable ([UserId]) Values (@NewID)

答案 1 :(得分:1)

如果您正在寻找批量插入建议使用 OUTPUT INSERTED

CREATE TABLE #Ids
(
    Id INT
)


INSERT INTO [User] ([UserFirstName], [UserSurname], [UserDob])
OUTPUT INSERTED.UserId INTO #Ids
VALUES ('Bob', 'Smith', '1979-01-01'),
     ('john', 'will', '1979-01-01'),
     ('jerry', 'david', '1979-01-01')

INSERT INTO OtherTable ([UserId]) select Id from #Ids

drop TABLE #Ids

答案 2 :(得分:0)

您可以创建临时表变量并创建一个名为 UserId 的列。

DECLARE @TempTable TABLE(UserId INT)

INSERT INTO User ([UserFirstName], [UserSurname], [UserDob])
OUTPUT inserted.UserId INTO @TempTable
Values ('Bob', 'Smith', '1979-01-01')

SELECT UserId FROM @TempTable --Get the auto increment Id

答案 3 :(得分:-1)

您无法将多个身份作为结果集返回。您的选项是使用游标并为您插入的每一行获取标识,或者在之前和之后存储标识。一定要锁定桌子。

如果是我,并且时间不重要,我会使用光标。