这是我的查询。在我的表用户中,模式是
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
调用上述信息答案 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)
您无法将多个身份作为结果集返回。您的选项是使用游标并为您插入的每一行获取标识,或者在之前和之后存储标识。一定要锁定桌子。
如果是我,并且时间不重要,我会使用光标。