Sql 用一个查询替换多个字段
除了运行两个单独的查询来替换mySql 用一个查询替换多个字段,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
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提供一个好的答案。我选择了另一个答案作为公认的解决方案,因为它概括了使用这种方法的缺点。