gpt4 book ai didi

sql-server - SQL Server 错误。标识列的显式值....只能在使用列列表且 IDENTITY_INSERT 为 ON 时指定

转载 作者:行者123 更新时间:2023-12-03 16:40:45 26 4
gpt4 key购买 nike

我正在尝试创建过程,它生成了一个错误说明

tblRegisterUser 中标识列的显式值只能在使用列列表且 IDENTITY_INSERT 为 ON 时指定。

我尝试用 INDENTITY_INSERT to ON 将插入语句括起来,但这也不起作用。我遗漏了什么或者我包含的子查询有错误吗?

存储过程如下

CREATE PROCEDURE dbo.spInsertUserRegister
(
@FirstName nvarchar(50),
@LastName nvarchar(50),
@Username nvarchar(50),
@Password nvarchar(50),
@Designation nvarchar(50),
@Department nvarchar(50),
@IsAdmin bit
)
AS
BEGIN
INSERT INTO tblRegisterUser Values
(
@FirstName, @LastName, @Username, @Password,@Designation,@Department,@IsAdmin
)
DECLARE @UID INT
SET @UID = @@IDENTITY
INSERT INTO tblLogin(Username,Password,UID,IsAdmin)
Values(@Username, @Password, @UID,(SELECT IsAdmin FROM tblRegisterUser WHERE Username=@Username AND Password=@Password))
END

最佳答案

如果tblRegisterUser 表的结构是这样的

ID int primary_key autoincrement
FirstName varchar
LastName varchar
Username varchar
Password varchar
Designation varchar
Department varchar
IsAdmin bit

这个说法是错误的:

INSERT INTO tblRegisterUser Values
(
@FirstName, @LastName, @Username, @Password,
@Designation,@Department,@IsAdmin
)

您应该使用明确的列列表来指定列:

INSERT INTO tblRegisterUser 
( FirstName, LastName, Username, Password,
Designation, Department, IsAdmin)
VALUES
(
@FirstName, @LastName, @Username, @Password,
@Designation,@Department,@IsAdmin
)

这样 ID 字段会自动填充,@@Identity 语句应该正确返回它。


也就是说,SQL Server has a few functions返回为最后一行生成的 ID,每一行都有自己特定的优点和缺点。

基本上:

  • @@IDENTITY 如果您不使用触发器则有效
  • SCOPE_IDENTITY() 适用于您明确调用的代码。
  • IDENT_CURRENT(‘tablename’) 适用于所有范围内的特定表。

在几乎所有场景中,SCOPE_IDENTITY() 都是您所需要的,使用它是一个好习惯,而不是其他选项。
关于这些方法的优缺点的很好的讨论也是可用的here .

复制自 this answer

关于sql-server - SQL Server 错误。标识列的显式值....只能在使用列列表且 IDENTITY_INSERT 为 ON 时指定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17020126/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com