【发布时间】:2020-02-12 17:10:19
【问题描述】:
在下面的查询中,我对名为welds 的表进行搜索,该表有一个名为Welds.Prefix 的列,其中包含NULL 行、具有实际值的行和具有空值的行。我需要帮助修改下面的查询,以便当用户在 @Prefix 中输入非 null 和非空值时,它会找到匹配的行。当@Prefix 为空白时,它会找到 Welds.Prefix 为空白的位置或 Welds.Prefix 为空的位置,但我不知道该怎么做,我知道我可以进行更新查询并将具有空值的列更改为空白空间,但我正在寻找另一种方式。我运行下面的查询,我得到一个错误“关键字'OR'附近的语法不正确”我明白为什么我得到这个错误但我不知道如何解决它,谢谢。
注意:@Prefix 将在前端输入,不会只绑定'',我只是为了提问而把它放在查询中。
@Prefix varchar(30) = ''
select *
from welds
WHERE Welds.Prefix = CASE WHEN @Prefix <> '' THEN @Prefix END
OR Welds.Prefix = CASE WHEN @Prefix = '' THEN '' OR IS NULL END
编辑: 我基本上想选择 Weld.Prefix 为空的行以及 @Prefix = ' ' 时 Weld.Prefix = ' '
【问题讨论】:
-
关注:
CASE WHEN COND1 THEN EXPR1 WHEN COND2 THEN [.. n] [ELSE COND] END。在上面的代码中,表达式(不是条件)是'' OR IS NULL- 检查关键字的位置,这种不正确的语法会导致语法错误。 -
这能回答你的问题吗? How do I create a conditional WHERE clause?
-
现在,
..WHEN @PREFIX = '' OR @PREFIX IS NULL THEN..之类的内容可能是合适的.. 并没有真正阅读“语法错误”之后的整个问题,这作为印刷错误获得了密切的投票:) -
@user2864740 这不起作用,因为“@prefix”不是空值,它只是空白
标签: sql sql-server case case-when