Mssql一起选择并更新,它会更新2行

时间:2014-03-18 08:57:15

标签: sql-server select

有一个程序,首先我想在屏幕上显示Minimun Que编号(C#)它的工作情况,它显示501作为最小阙编号然后更新,因为我在下面写下来,但它的更新ID 501和502在同一时间时间... (选择id值并更新id行所具有的字段之一)

有更好的方法吗?

Create procedure [dbo].[nmr_sp_srd]
(
 @opid int
)
AS
Begin

Begin Transaction

select  Min(Que) from nmr_tbl_srbklynlr where turId=@opid and actpf=1

UPDATE nmr_tbl_srbklynlr
SET actpf= 0
Where Que=(select  Min(Que) from nmr_tbl_srbklynlr where turId=@opid and actpf=1)
Commit Transaction

End

1 个答案:

答案 0 :(得分:2)

您可以通过将值存储在变量中来避免双重查询。如果要在与where子句匹配的所有行中最多更新一行,则可以使用update top (1)

declare @min_que int

select  @min_que = Min(Que) 
from    nmr_tbl_srbklynlr 
where   turId = @opid and actpf = 1

update  top (1) nmr_tbl_srbklynlr 
set     actpf = 0
where   Que = @min_que

select  @min_que