2013-09-08 5 views
16

У меня есть таблица SQL-сервера, в которой есть два столбца, которые я хочу обновить либо их значения в соответствии с флагом, отправленным в хранимую процедуру вместе с новым значением, например:если условие в запросе обновления сервера sql

UPDATE 
    table_Name 

SET 
    CASE 
     WHEN @flag = '1' THEN column_A += @new_value 
     WHEN @flag = '0' THEN column_B += @new_value 
    END AS Total 

WHERE 
    ID = @ID 

Каков правильный код сервера SQL для этого?

+0

Почему '' + =? Вы пытаетесь добавить '@ new_value' к тому, что уже находится в столбце? –

+0

да, я вот, и поэтому мне нужен условный код обновления, потому что в зависимости от флага я буду обновлять предполагаемый столбец – M009

ответ

15

текущие ответы являются хорошо и должно работать нормально, но что не так с более простым, более очевидным и более удобным для обслуживания:

IF @flag = 1 
    UPDATE table_name SET column_A = column_A + @new_value WHERE ID = @ID; 
ELSE 
    UPDATE table_name SET column_B = column_B + @new_value WHERE ID = @ID; 

Это намного легче читать, хотя это очень простой запрос.

Вот рабочий пример любезно предоставлен @snyder: SqlFiddle.

+0

В вашем запросе есть синтаксическая ошибка, проверьте это http://sqlfiddle.com/#!3/74fcd/11 –

+0

@snyder. Спасибо, это просто точки с запятой. [SqlFiddle] (http://sqlfiddle.com/#!3/74fcd/12). –

+0

@flem - Вам не нужно удалять полуколоны, просто измените терминатор оператора в правой панели. http://sqlfiddle.com/#!3/2ea6e/2 –

18

Что-то, как это должно работать:

UPDATE 
    table_Name 
SET 
    column_A = CASE WHEN @flag = '1' THEN column_A + @new_value ELSE column_A END, 
    column_B = CASE WHEN @flag = '0' THEN column_B + @new_value ELSE column_B END 
WHERE 
    ID = @ID 
7

Так как вы используете SQL 2008:

UPDATE 
    table_Name 

SET 
    column_A 
    = CASE 
     WHEN @flag = '1' THEN @new_value 
     ELSE 0 
    END + column_A, 

    column_B 
    = CASE 
     WHEN @flag = '0' THEN @new_value 
     ELSE 0 
    END + column_B 
WHERE 
    ID = @ID 

Если вы используете SQL 2012:

UPDATE 
    table_Name 
SET 
    column_A = column_A + IIF(@flag = '1', @new_value, 0), 
    column_B = column_B + IIF(@flag = '0', @new_value, 0) 
WHERE 
    ID = @ID 
2

это прекрасно работало:

UPDATE 
    table_Name 
SET 
    column_A = CASE WHEN @flag = '1' THEN column_A + @new_value ELSE column_A END, 
    column_B = CASE WHEN @flag = '0' THEN column_B + @new_value ELSE column_B END 
WHERE 
    ID = @ID 
+0

кажется, что тема уже решена :) – Xstian

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