一次更新一行SQL行

时间:2016-01-08 13:41:47

标签: triggers sql-server-2008-r2 sql-update

我正在尝试在我们的SQL服务器上进行批量更新,在我们的情况下可以通过以下代码轻松完成。

update patient set security_level = '2'
where security_level = '1'

问题是我们的SQL服务器连接到一个将事务发送到状态的mirth服务器,如果一次更新多行,则mirth服务器会锁定,所以我希望有一种方法可以更新一次一行。为了防止我们制造软件的供应商有多个触发器。触发器的一段代码是

IF (@numrows > 1) 
BEGIN
    IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION
    SELECT @errmsg = OBJECT_NAME(@@PROCID) + ' : more than one row is updated in table Patient'                                 
    RAISERROR(@errmsg,16,21) 
    RETURN
END

如果我要禁用3个触发器,它会破坏其他东西。感谢您提出的任何建议或想法。

1 个答案:

答案 0 :(得分:1)

declare @tmp_table table(
PRG int identity(1,1) Primary Key,
patient_id int
)

declare @start_value int = 1,
 @finish_value int,
 @patient_id int

Insert Into @tmp_table(patient_id ) Select patient_id  From patient where  security_level = '1'

Select @finish_value = max(PRG) From  @tmp_table

While @start_value <= @finish_value 
Begin
  --now get a key for patient and store in variables
  Select @patient_id =  patient_id 
  From  @tmp_table
  Where PRG = @start_value 

  --.. and now update by key
  Update patient
  set security_level = '2'
  Where patient_id  = @patient_id 


Set @start_value = @start_value  + 1
End