一次更新SQL行一行

一次更新SQL行一行

问题描述:

我正在尝试在我们的SQL服务器上执行批量更新,这很容易在我们的情况下由以下代码完成。一次更新SQL行一行

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

的问题是我们的SQL服务器连接到如果超过一个排在同一时间更新发送交易国家和欢笑服务器锁定了一个欢乐的服务器,所以我希望有一种方法一次更新一行。为了防止我们的软件供应商有几个触发器到位。一段代码的触发器是

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触发器它会打破其他的事情。感谢您的任何建议或想法。

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 
+0

Msg 102,Level 15,State 1,Line 4 '

+0

我收到上面的错误。我有点头大,所以不想猜错。感谢您的帮助。 –

+0

我的错。我不知道病人列表中的关键列。我会指出,与@相同 。您必须用正确的值替换所有<..>部分。如果你在这里报告键列名称和类型我完成查询。 – GigiS