Nic*_*rie 1 sql t-sql sql-server
您将如何重写此伪 SQL 中的 WHERE 子句?
SELECT *
FROM MyTable
WHERE IF ( Col1 <> '' ) Col1 = @Val1
ELSEIF ( Col2 <> '' ) Col2 = @Val2
Run Code Online (Sandbox Code Playgroud)
您的伪代码的正确等效项是:
WHERE (Col1 <> '' AND Col1 = @Val1) OR
(Col1 = '' AND Col2 <> '' AND Col2 = @Val2)
Run Code Online (Sandbox Code Playgroud)
这按优先级顺序匹配,首先是 on Col1
,然后是 on Col2
。它只移动到Col2
whenCol1
是一个空字符串。
注意:此版本假定Col1
不是NULL
. 如果您需要支持NULL
值,那么这可以很容易地合并到逻辑中——尤其是关于如何处理它们的一些指导。