Sql server 2012 where条件下的case语句

Sql server 2012 where条件下的case语句,sql-server-2012,sql-like,case-statement,Sql Server 2012,Sql Like,Case Statement,在下面的脚本中,它显示了“关键字”附近的不正确语法,如“”。我使用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_D

在下面的脚本中,它显示了“关键字”附近的不正确语法,如“”。我使用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
声明
@MANU NVARCHAR(4000)=“MANU0071”
开始
选择TOP 1000 TP.F_产品作为ID,
TP.F_产品名称作为名称
来自PDF\u详细信息TP
左连接V_PROD_ALIAS_MANU MAN ON MAN.F_PRODUCT=TP.F_PRODUCT
其中TP.F_产品”和
(当LEN(MAN.F_TEXT_CODE)>10时的情况,然后
(MAN.F_TEXT_CODE)比如@MANU
ELSE MAN.F_TEXT_CODE=@MANU END)和
(TP.F_CUSTOM5为空或TP.F_CUSTOM5='')
结束

你不能那样使用
案例。
case
是一个基于条件返回标量值的表达式。
它不能用作流量控制元素

您所描述的逻辑可以通过组合使用
来实现:

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

我在输入参数中使用了“%MANU0071%”。我忘了在输入参数中提到它,所以当您想
=
而不是像
那样
时,您可能想使用
替换(@MANU,%,“”)
,谢谢。我会尝试的。很乐意帮助:-)
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: