当我尝试将值同时插入多个行时,SQL Server会导致错误。所以基本上,我创建了以下表和查询
create table Dates
(
id int not null primary key,
dates DateTime Not Null Default(GetDate())
)
declare @i int
set @i = @@ROWCOUNT + 1
insert into dbo.Dates(id)
values (@i + 1)
select * from Dates
当我反复运行第二个查询时,会发生以下错误:
违反PRIMARY KEY约束'PK__Dates__3213E83F76720BE7'。无法在对象'dbo.Dates'中插入重复键。重复键值为(3)。 声明已经终止。
为什么会出现此错误?我正在创建一个表单,信息将存储在SQL Server中,我不希望这种情况发生。我能做什么?谢谢。
答案 0 :(得分:2)
使用identity自动生成列的下一个值
{{1}}
答案 1 :(得分:1)
您想使用IDENTITY。无需手动执行此操作。
在您的情况下,@@ROWCOUNT不会更改,因此您会获得重复的密钥...
进行简单赋值的语句始终将@@ ROWCOUNT值设置为1.不向客户端发送任何行。这些语句的示例包括:SET @local_variable,RETURN,READTEXT和select,不包含SELECT GETDATE()或SELECT'Generic Text'等查询语句。
declare @i int
set @i=@@ROWCOUNT+1
select @i
set @i = @@ROWCOUNT+1
select @i
答案 2 :(得分:0)
insert语句中的表达式@i+1
将始终返回相同的值。它不会增加变量@i
的值。这就是出错的原因。将insert语句放在循环中并使用语句set @i = @i + 1
来增加循环内@i
的值。