【发布时间】:2014-01-27 09:25:33
【问题描述】:
------------这是我更新表的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
我尝试使用列表视图中的新订单更新表时违反了 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)
)
【问题讨论】:
-
那么问题是什么?
-
旁注:
CREATE PROCEDURE:“在命名过程时避免使用 sp_ 前缀。SQL Server 使用此前缀来指定系统过程。使用前缀可以如果存在同名的系统过程,则会导致应用程序代码中断。” -
在 ODM_BatchSteps 表中的 StepOrder 列上是否有唯一索引?
-
对不起,我的朋友,我正在尝试按行号更新我的表中的(StepOrder)...新订单在我的程序中通过按钮(作品)在列表视图中向上或向下移动.. . 当我通过新订单时,它必须更新表格中的订单......希望这有任何意义
-
steve--- 拥有它但刚刚删除它.. 但现在似乎没有发生任何变化(没有错误)
标签: sql sql-server vb.net