Uploaded image for project: 'Rules Repository'
  1. Rules Repository
  2. RSPEC-1862 Related "if/else if" statements should not have the same condition
  3. RSPEC-4097

T-SQL: Related "IF"/"ELSE IF" statements and "WHEN" clauses in a "CASE" should not have the same condition

    Details

    • Type: Language-Specification
    • Status: Active
    • Resolution: Unresolved
    • Labels:
      None
    • Message:
      This condition duplicates the one on line n.
    • Impact:
      Unknown 'null' severity
    • Likelihood:
      Unknown 'null' severity

      Description

      A CASE and a chain of IF/ELSE IF statements is evaluated from top to bottom. At most, only one branch will be executed: the first one with a condition that evaluates to true.

      Therefore, duplicating a condition automatically leads to dead code. Usually, this is due to a copy/paste error. At best, it's simply dead code and at worst, it's a bug that is likely to induce further bugs as the code is maintained, and obviously it could lead to unexpected behavior.

      Noncompliant Code Example

      IF @x = 1
        PRINT 'A'
      ELSE IF @x = 2
        PRINT 'B'
      ELSE IF @x = 1 -- Noncompliant
        PRINT 'C'
      
      SELECT
        CASE col1
          WHEN 1 
            THEN 'A'
          WHEN 2 
            THEN 'B'
          WHEN 1  -- Noncompliant
            THEN 'C'
          ELSE 'D'
        END
      FROM table1
      

      Compliant Solution

      IF @x = 1
        PRINT 'A'
      ELSE IF @x = 2
        PRINT 'B'
      ELSE IF @x = 3
        PRINT 'C'
      
      SELECT
        CASE col1
          WHEN 1 
            THEN 'A'
          WHEN 2 
            THEN 'B'
          WHEN 3 
            THEN 'C'
          ELSE 'D'
        END
      FROM table1
      

        Attachments

          Activity

            People

            • Assignee:
              Unassigned
              Reporter:
              alban.auzeill Alban Auzeill
            • Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

              Dates

              • Created:
                Updated: