这是我的发言
IF (@UserName IS NULL AND @EditorKey IS NULL) OR (@UserName IS NOT NULL AND @EditorKey IS NOT NULL) BEGIN
RAISERROR ('One of @UserName, @EditorKey must be non-null.', 15, 0)
RETURN
END
Run Code Online (Sandbox Code Playgroud)
我想要的是能够做这样的事情:
IF (@UserName IS NOT NULL) XOR (@EditorKey IS NOT NULL) BEGIN
RAISERROR ('One of @UserName, @EditorKey must be non-null.', 15, 0)
RETURN
END
Run Code Online (Sandbox Code Playgroud)
对于两个参数来说,这并不是什么大不了的事,但是有些过程有三个或四个只有一个可以传递,其余的应该为空.
Chr*_*tow 15
不是很简洁,但你可以像这样扩展逻辑:
WHERE
(NOT ((@UserName IS NOT NULL) AND (@EditorKey IS NOT NULL))) AND
((@UserName IS NOT NULL) OR (@EditorKey IS NOT NULL))
Run Code Online (Sandbox Code Playgroud)
或者使用按位XOR运算符(^):
WHERE
(CASE WHEN (@UserName IS NOT NULL) THEN 1 ELSE 0 END) ^
(CASE WHEN (@EditorKey IS NOT NULL) THEN 1 ELSE 0 END) = 1
Run Code Online (Sandbox Code Playgroud)
您可以使用类似的方法,其中有三个或四个参数,并且只有一个必须具有值:
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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
17923 次 |
最近记录: |