在下面的脚本中,它显示'关键字'LIKE'附近的语法不正确。我使用CASE语句检查F_TEXT_CODE> 10的长度。如果它的长度> 10,那么我使用like运算符如果它小于10我正在使用'='运算符。如何在哪里实现这种逻辑条件?
DECLARE
@MANU NVARCHAR(4000)='MANU0071'
BEGIN
SELECT TOP 1000 TP.F_PRODUCT AS ID,
TP.F_PRODUCT_NAME AS NAME
FROM PDF_DETAILS TP
LEFT JOIN V_PROD_ALIAS_MANU MAN ON MAN.F_PRODUCT = TP.F_PRODUCT
WHERE TP.F_PRODUCT<>''AND
(CASE WHEN LEN(MAN.F_TEXT_CODE)>10 THEN
(MAN.F_TEXT_CODE) LIKE @MANU
ELSE MAN.F_TEXT_CODE = @MANU END) AND
(TP.F_CUSTOM5 IS NULL OR TP.F_CUSTOM5 = '')
END
你不能像那样使用case
。
case
是一个基于条件返回标量值的表达式。
它不能用作流量控制元素。
您描述的逻辑可以使用or
和and
的组合来完成:
DECLARE @MANU NVARCHAR(4000)='MANU0071'
BEGIN
SELECT TOP 1000 TP.F_PRODUCT AS ID,
TP.F_PRODUCT_NAME AS NAME
FROM PDF_DETAILS TP
LEFT JOIN V_PROD_ALIAS_MANU MAN ON MAN.F_PRODUCT = TP.F_PRODUCT
WHERE TP.F_PRODUCT<>''
AND
(
(LEN(MAN.F_TEXT_CODE)>10 AND MAN.F_TEXT_CODE LIKE @MANU)
OR
(LEN(MAN.F_TEXT_CODE)<=10 AND MAN.F_TEXT_CODE = @MANU)
)
AND
(TP.F_CUSTOM5 IS NULL OR TP.F_CUSTOM5 = '')
END
但请注意,使用没有任何通配符的like
将返回与使用=
相同的结果,因此整个事情可以像这样写
DECLARE @MANU NVARCHAR(4000)='MANU0071'
BEGIN
SELECT TOP 1000 TP.F_PRODUCT AS ID,
TP.F_PRODUCT_NAME AS NAME
FROM PDF_DETAILS TP
LEFT JOIN V_PROD_ALIAS_MANU MAN ON MAN.F_PRODUCT = TP.F_PRODUCT
WHERE TP.F_PRODUCT<>''
AND
AND MAN.F_TEXT_CODE = @MANU
AND
(TP.F_CUSTOM5 IS NULL OR TP.F_CUSTOM5 = '')
END: