运行时更新表,编译时未知的列

时间:2011-09-16 01:47:33

标签: sql sql-update

我正在尝试编写SQL以根据代码中的某些代码条件更新多个列。

例如,将其设为两列中最简单的

UPDATE table set A = valueA where conditionA..

UPDATE table set B=valueB where conditionA..

UPDATE table set A=valueA, B=valueB where conditionA..

条件相同,但根据代码

,valueA / valueB可能不存在

有没有方便的方法将它们组合在一个SQL中,例如选择一个WHERE 1=1 and <condition>,这样我可以添加条件,无论一个或多个条件?

希望它有意义。

2 个答案:

答案 0 :(得分:0)

如果您使用相同的条件,您可以像这样编写查询:

UPDATE [table] SET A = valueA, B=valueB, C=valueC WHERE <condition>

但是如果你需要所有字段的不同条件,你可以使用这样的CASE运算符:

UPDATE [table] SET A = CASE WHEN <cond_for_A> THEN valA ELSE A END, 
  CASE WHEN <cond_for_B> THEN valB ELSE B END,
  CASE WHEN <cond_for_C> THEN valC ELSE C END

答案 1 :(得分:0)

您可能会更改正在更新的字段,可能是基于代码中的某些条件,这可能意味着您将无法仅使用一条SQL语句 - 绑定参数无法在SQL中“添加”或“删除”列文本。

如果您有少量列,则可以为感兴趣的每个组合创建单独的SQL语句。否则,您可能需要动态构造SQL文本并填充语句的SET子句,以便它包含您需要的列。

但这些都不应成为跳过正确绑定所有参数的借口!