Sql 用一个查询替换多个字段

Sql 用一个查询替换多个字段,sql,sql-server,replace,sql-update,Sql,Sql Server,Replace,Sql Update,除了运行两个单独的查询来替换myparts表中的innerSku和outerSku字段外,是否有一种方法可以在一个查询中完成此操作而不影响性能 UPDATE parts SET innerSku = @newSku WHERE innerSku = @oldSku; UPDATE parts SET outerSku = @newSku WHERE outerSku = @oldSku; 我会坚持使用两个单独的语句,因为使用followi

除了运行两个单独的查询来替换my
parts
表中的
innerSku
outerSku
字段外,是否有一种方法可以在一个查询中完成此操作而不影响性能

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


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

我会坚持使用两个单独的语句,因为使用following会更新一些不需要更新的行,它会将行更新为自身,这不会更改数据,但会发生不必要的更新操作,我会说坚持使用两个更新。无论如何,下面是如何使用一条update语句更新此表

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

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

根据表的索引方式,您可能会在锁定范围或表的位置添加大量的索引更新和额外时间。另外,这两个简单的语句更具可读性(和可测试性)。True@Rawheiser同意100%+1提供一个好的答案。我选择了另一个答案作为公认的解决方案,因为它概括了使用这种方法的缺点。