用一个查询替换多个字段

时间:2014-09-05 18:44:40

标签: sql sql-server replace sql-update

有没有一种方法可以在一个查询中执行此操作而不影响性能,而不是运行两个单独的查询来替换innerSku表中的outerSkuparts字段?

UPDATE 
    parts
SET 
    innerSku = @newSku
WHERE
    innerSku = @oldSku;


UPDATE
    parts
SET
    outerSku = @newSku
WHERE
    outerSku = @oldSku;

2 个答案:

答案 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