我有一个SQL Server表中有两列,我想根据发送到存储过程的标志和新值更新它们的任何值,例如: - t3 l# }$ c, UUPDATE table_NameSET CASE WHEN @flag = '1' THEN column_A = @new_value WHEN @flag = '0' THEN column_B = @new_value END AS TotalWHERE ID = @ID这样做是正确的SQL Server什么是代码?* n, @# i: q0 O/ F9 B5 H7 \
% D" d- X7 ]: s解决方案: 4 O4 S( f- H+ R$ P 目前的答案很好,应该可以,但是有什么问题更简单,更明显,更容易维护: & }. X, o. k* \; DIF @flag = 1 UPDATE table_name SET column_A = column_A @new_value WHERE ID = @ID;ELSE UPDATE table_name SET column_B = column_B @new_value WHERE ID = @ID;虽然这是一个非常简单的查询,但它更容易阅读。- b$ T, F+ m0 o2 P @( r7 F/ _
这是@snyder工作示例:SqlFiddle。