此TSQL查询中的语法错误在哪里?

此TSQL查询中的语法错误在哪里?,tsql,Tsql,下面的TQL查询是从我正在使用的工具生成的,但在执行时,在“LIKE”附近出现语法错误。我似乎不明白问题出在哪里。有人知道怎么了吗 SQL Management Studio的错误是“Msg 156,级别15,状态1,第17行关键字'LIKE'附近的语法不正确。” 选择COUNT\u BIG(*) 从[HistoryReport]起,作为t0 其中(10)和 (如有)( (当(t0.[CategoryValue]为空时的情况) 然后无效 ELSE较低(t0.[CategoryValue]) 结束

下面的TQL查询是从我正在使用的工具生成的,但在执行时,在“LIKE”附近出现语法错误。我似乎不明白问题出在哪里。有人知道怎么了吗

SQL Management Studio的错误是“Msg 156,级别15,状态1,第17行关键字'LIKE'附近的语法不正确。”

选择COUNT\u BIG(*)
从[HistoryReport]起,作为t0
其中(10)和
(如有)(
(当(t0.[CategoryValue]为空时的情况)
然后无效
ELSE较低(t0.[CategoryValue])
结束)为空
) 
然后无效
否则(
(当(t0.[CategoryValue]为空时的情况)
然后无效
ELSE较低(t0.[CategoryValue])
结束)如“U”+“%”
)
(完)

有几件事很奇怪,您正在测试一个值是否为null,如果为null则返回null,如果为null则返回值。然后,您将再次检查代码分支中的空值,该分支仅在值绝对不为空时执行。有点不必要,而且非常混乱。此外,我怀疑您与
NULL
的比较不会像您想象的那样有效,因为
NULL 0
在默认情况下将计算为
NULL

顺便说一句:通常,在SQL SERVER中,字符串不区分大小写(除非您使用区分大小写的排序规则配置列或服务器,这在某种程度上是不常见的)

我正在努力弄明白你的真正意思,这里是一个语法正确的版本,我认为你在尝试做什么:

SELECT COUNT_BIG(*)
FROM [HistoryReport] AS t0
WHERE (1 <> 0 AND LOWER(t0.categoryValue) like 'U' + '%')
而且:

那么result_expression是在 当_表达式的计算结果为TRUE时,输入_表达式等于,或 布尔_表达式的计算结果为TRUE。结果表达式是任何有效的 表情


你对
LIKE
的理解似乎应该是一个有效的表达式,但似乎
LIKE
处于有效运算符的边缘。

你得到了什么错误消息?我编辑了原始问题并添加了错误消息。这是什么工具?生成的查询看起来非常糟糕且无法组织。您正在匹配什么?我是说你的目标是什么?好吧,那太难看了。您试图实现什么逻辑,可能需要两行代码才能完成……感谢您的详细解释。我还没有找出错误的原因,但我认为你提供的信息可能包含一些线索。
SELECT COUNT_BIG(*)
FROM [HistoryReport] AS t0
WHERE (1 <> 0 AND LOWER(t0.categoryValue) like 'U' + '%')
Simple CASE expression: 
CASE input_expression 
     WHEN when_expression THEN result_expression [ ...n ] 
     [ ELSE else_result_expression ] 
END 
Searched CASE expression:
CASE
     WHEN Boolean_expression THEN result_expression [ ...n ] 
     [ ELSE else_result_expression ] 
END