if condition in sql server update query

前端 未结 5 800
日久生厌
日久生厌 2021-02-01 16:29

I have a SQL server table in which there are 2 columns that I want to update either of their values according to a flag sent to the stored procedure along with the new value, so

相关标签:
5条回答
  • 2021-02-01 17:02

    The current answers are fine and should work ok, but what's wrong with the more simple, more obvious, and more maintainable:

    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;
    

    This is much easier to read albeit this is a very simple query.

    Here's a working example courtesy of @snyder: SqlFiddle.

    0 讨论(0)
  • 2021-02-01 17:08

    Since you're using 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
    

    If you were using 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
    
    0 讨论(0)
  • 2021-02-01 17:09

    this worked great:

    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 讨论(0)
  • 2021-02-01 17:10

    Something like this should work:

    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 讨论(0)
  • 2021-02-01 17:11
    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 讨论(0)
提交回复
热议问题