【发布时间】:2016-08-08 11:38:58
【问题描述】:
您好,我有如下疑问:
SELECT route_id [ROUTE_ID]
FROM route_master(NOLOCK)
WHERE route_ou = 2
AND route_query = @l_s_query
AND lang_id = 1
这里,只有当@l_s_query 不为空时,才应在 WHERE 子句中添加“AND route_query = @l_s_query”条件。我不想为@l_s_query 编写 IF ELSE 条件。有什么方法可以直接在 WHERE 子句中处理。谢谢。
【问题讨论】:
-
或许
... AND (route_query = @l_s_query OR @l_s_query IS NULL) ...? -
添加这个
AND (@l_s_query IS NULL OR route_query = @l_s_query) -
标题中的问题“不为空”与标题中的问题“非空”不一致(因为我们称零长度字符串为“空”)。这就是为什么你有两个不同的答案,来自 sagi 和 Tamas。
-
我以前在这样的查询中使用过 CASE 语句,在错误的情况下值是相同的,例如。
... AND route_query = (CASE WHEN @l_s_query is not null THEN @l_s_query ELSE route_query END)
标签: sql sql-server