2014-09-05 3 views
2

Вместо того, чтобы запускать два отдельных запроса для замены полей innerSku и outerSku в моей таблице parts, есть ли способ сделать это в одном запросе без ущерба для производительности?Заменить несколько полей одним запросом

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


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

ответ

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 
+1

Было как раз опубликовано то же самое .... кажется, что вы избили меня до него. :) –

+1

И в зависимости от того, как индексируется таблица, вы можете добавить беспорядок обновления индекса и дополнительное время, когда диапазон или таблица заблокированы. Плюс два простых утверждения являются более читабельными (и проверяемыми). – Rawheiser

+0

True @Rawheiser согласился 100% –

4

Случай утверждение становится вашим, где условие, определяющее, какое значение для установки только обновления столбец, который удовлетворяет условию, в противном случае он будет просто установить текущее значение обратно.

Предложение 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 
+0

** + 1 ** за предоставленный хороший ответ. Я выбрал другой ответ как принятое решение, хотя из-за того, что он указывает на недостатки использования этого подхода. –

Смежные вопросы