[英]SQL Server error: Violation of Primary Key - why?
當我嘗試將值一次又一次地插入多個行時,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
當我反復運行第二個查詢時,會發生此錯誤:
違反主鍵約束'PK__Dates__3213E83F76720BE7'。 無法在對象“ dbo.Dates”中插入重復鍵。 重復的鍵值為(3)。 該語句已終止。
為什么顯示此錯誤? 我正在創建一個表單,信息將存儲在SQL Server中,並且我不希望這種情況發生。 我能做什么? 謝謝。
使用將自動為您的列生成下一個值的標識
create table Dates (
id int identity(1,1) primary key,
dates DateTime Not Null Default(GetDate())
)
您想使用IDENTITY 。 無需手動執行此操作。
就您而言, @@ ROWCOUNT不變,因此您會得到重復的密鑰...
進行簡單分配的語句始終將@@ ROWCOUNT值設置為1。沒有行發送到客戶端。 這些語句的示例包括:SET @ local_variable,RETURN,READTEXT,以及不帶查詢語句的選擇,例如SELECT GETDATE()或SELECT'Generic Text'。
declare @i int
set @i=@@ROWCOUNT+1
select @i
set @i = @@ROWCOUNT+1
select @i
insert語句中的表達式@i+1
將始終返回相同的值。 它不會增加變量@i
的值。 這就是為什么有一個錯誤。 將插入語句放入循環內,並使用語句set @i = @i + 1
來增加循環內@i
的值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.