Is there an exclusive OR operator in T-SQL?

前端 未结 3 1658
既然无缘
既然无缘 2021-02-12 15:49

This is my statement

IF (@UserName IS NULL AND @EditorKey IS NULL) OR (@UserName IS NOT NULL AND @EditorKey IS NOT NULL) BEGIN
    RAISERROR (\'One of @UserName,         


        
3条回答
  •  醉话见心
    2021-02-12 16:39

    Not very succinct, but you could expand out the logic like this:

    WHERE
        (NOT ((@UserName IS NOT NULL) AND (@EditorKey IS NOT NULL))) AND
        ((@UserName IS NOT NULL) OR (@EditorKey IS NOT NULL))
    

    Or use the bitwise XOR operator (^):

    WHERE
        (CASE WHEN (@UserName IS NOT NULL) THEN 1 ELSE 0 END) ^
        (CASE WHEN (@EditorKey IS NOT NULL) THEN 1 ELSE 0 END) = 1
    

    You can use a similar approach where there are three or four parameters, and exactly one must have a value:

    WHERE
        (CASE WHEN (@Var1 IS NOT NULL) THEN 1 ELSE 0 END) +
        (CASE WHEN (@Var2 IS NOT NULL) THEN 1 ELSE 0 END) +
        (CASE WHEN (@Var3 IS NOT NULL) THEN 1 ELSE 0 END) +
        (CASE WHEN (@Var4 IS NOT NULL) THEN 1 ELSE 0 END) = 1
    

提交回复
热议问题