我正在尝试在我们的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个触发器,它会破坏其他东西。感谢您提出的任何建议或想法。
答案 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