我有这样的查询
update mst_doc_proc_list set is_display = 0, is_mandatory = 1, is_deleted = case
when (is_display = 1 and is_mandatory = 1) then 1 else 0 end
where eff_date = '11/4/2017';
当我第一次执行时,is_display
和is_mandatory
已更新
我必须执行两次来更新查询中的所有内容。如何在一次执行中运行这些查询?
答案 0 :(得分:0)
is_display
语句中的 is_mandatory
和CASE
获取行中的当前值,而不是新值。
在您的示例查询中,您实际上拥有set is_display = 0
,这意味着您根本不需要案例陈述,您也可以将其硬编码为0
。
在您的真实查询中,您是否使用绑定变量作为is_display
和is_mandatory
的值?如果是,则在两个位置使用绑定变量来表示这些值:
update mst_doc_proc_list set is_display = ?, is_mandatory = ?, is_deleted = case
when (is_display = ? and is_mandatory = ?) then 1 else 0 end
where eff_date = '11/4/2017';
或者,我可能会将此逻辑放在代码中,而不是SQL。
update mst_doc_proc_list set is_display = ?, is_mandatory = ?, is_deleted = ?
where eff_date = '11/4/2017';