web-dev-qa-db-de.com

Wenn Bedingung in SQL Server-Aktualisierungsabfrage

Ich habe eine SQL Server-Tabelle, in der zwei Spalten vorhanden sind, deren Werte gemäß einem Flag aktualisiert werden sollen, das zusammen mit dem neuen Wert an die gespeicherte Prozedur gesendet wird. Beispiel:

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

Was ist der richtige SQL Server Code dafür?

21
M009

Die aktuellen Antworten sind in Ordnung und sollten funktionieren, aber was ist falsch an den einfacheren, offensichtlicheren und wartbareren:

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;

Dies ist viel einfacher zu lesen, obwohl dies eine sehr einfache Abfrage ist.

Hier ist ein funktionierendes Beispiel mit freundlicher Genehmigung von @snyder: SqlFiddle .

18
Paul Fleming

So etwas sollte funktionieren:

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
24

Seit Sie SQL 2008 verwenden:

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

Wenn Sie SQL 2012 verwenden:

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
10
Preet Sangha

das hat super geklappt:

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
3
MJBLACKEND
DECLARE @JCnt int=null
SEt @JCnt=(SELECT COUNT( ISNUll(EmpCode,0)) FROM tbl_Employees WHERE EmpCode=1  )

UPDATE #TempCode
SET janCA= CASE WHEN @JCnt>0 THEN (SELECT SUM (ISNUll(Amount,0)) FROM tbl_Salary WHERE Code=1 )ELSE 0 END
WHERE code=1
0
JIYAUL MUSTAPHA