簡體   English   中英

SQL Server錯誤:違反主鍵-為什么?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM