------------------------这是我更新表的sql过程---------------- ---------
create procedure sp_stepUpdate
@ID int,
@StepOrder int
AS
BEGIN
IF OBJECT_ID('tempdb.dbo.#UpdateBatch','u') IS NOT NULL
begin
DROP TABLE #UpdateBatch
end
IF OBJECT_ID('tempdb.dbo.#UpdateBatch2','u') IS NOT NULL
begin
DROP TABLE #UpdateBatch2
end
create table #UpdateBatch2
(
ID int,
StepOrder int
)
insert into #UpdateBatch2 values (@ID,@StepOrder)
Select *,ROW_NUMBER() OVER(ORDER BY ID) as newIID into #UpdateBatch
from #UpdateBatch2
set identity_insert [ODM_BatchSteps] ON
Update [ODM_BatchSteps]
set [StepOrder] = newIID
From #UpdateBatch
where [ODM_BatchSteps].ID = #UpdateBatch.ID
set identity_insert [ODM_BatchSteps] off
END
go
----------------这是我在程序中从列表中获取新订单的代码------
connection.Open()
For Each item As ListViewItem In ListView1.Items
Dim command As SqlCommand = New SqlCommand("sp_stepUpdate", connection)
command.CommandType = CommandType.StoredProcedure
command.Parameters.AddWithValue("@ID", item.SubItems(0).Text)
command.Parameters.AddWithValue("@StepOrder", item.SubItems(1).Text)
command.ExecuteNonQuery()
Next
当尝试使用 ListView 中的新订单更新表时,我遇到了违反 UNIQUE KEY 约束的情况
------------这是我尝试更新的订单表-----
create table [dbo].[ODM_BatchSteps]
(
[ID] uniqueidentifier primary key not null default newid(),
[StepOrder]int ,
[StepType]int,
[StepGrid]nvarchar(max),
[BatchGrid]int,
foreign key (BatchGrid) REFERENCES ODM_Batches(ID)
)
最佳答案
该错误意味着您正在尝试插入数据库中已存在的键值(id?)。 我只看到一条插入语句,因此您最好检查一下传递给它的值..
关于sql - 违反 UNIQUE KEY 约束无法在对象中插入重复的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21377125/