【发布时间】:2018-09-30 22:14:49
【问题描述】:
有一个讨论,只有当它不相等时才更新一个字段
我想实现类似于
UPDATE MyTable
SET col1 = @newValue
WHERE Id = @Id AND col1 != @newValue
但问题是如果表有例如 20 列,如何做到这一点:
我是否应该对每一列重复上述操作(这将限制那些真正不同的字段的更新)。
或者更好地做类似的事情
UPDATE xx
SET col1 = Value1,
col2 = Value2,
col3 = Value3...
WHERE id = ID
AND (col1 != Value1 OR col2 != Value2 OR col3 != Value3)
即使只有 1 列不同,这也会一次更新所有 20 列。例如,如果需要更新 5 个值,则速度会更快。
【问题讨论】:
-
除了 Gordon 的回答之外,您可能还想查看
Slowly Changing Dimensions - Type 1的实现并忽略其中的INSERT部分。 SCD1 中的更新工作方式与您想要的相同。并确保处理NULL,因为您无法将NULL与NULL进行比较,这会给您带来意想不到的结果。
标签: sql sql-update