有没有一种方法可以在一个查询中执行此操作而不影响性能,而不是运行两个单独的查询来替换innerSku
表中的outerSku
和parts
字段?
UPDATE
parts
SET
innerSku = @newSku
WHERE
innerSku = @oldSku;
UPDATE
parts
SET
outerSku = @newSku
WHERE
outerSku = @oldSku;
答案 0 :(得分:4)
case语句成为确定要设置的值的where条件,只更新满足条件的列,否则只会设置当前值。
where子句使你不必在整个表格上运行语句。
SET parts.innerSku = (CASE WHEN innerSku = @oldSku THEN @newSku ELSE innerSku END),
parts.outerSku = (CASE WHEN outerSku = @oldSku THEN @newSku ELSE outerSku END)
WHERE parts.innerSku = @oldSku or parts.outerSku = @oldSku
答案 1 :(得分:2)
我会坚持两个单独的语句,因为使用以下将更新一些不需要更新的行,它会将行更新为自身,这不会改变数据但会发生不必要的更新操作,我会说坚持两个更新。无论如何以下是如何使用一个更新语句更新此表。
UPDATE Parts
SET innerSku = CASE
WHEN innerSku = @oldSku
THEN @newSku ELSE innerSku
END
,outerSku = CASE
WHEN outerSku = @oldSku
THEN @newSku ELSE outerSku
END
WHERE innerSku = @oldSku OR outerSku = @oldSku