Sql server 2012 where条件下的case语句
在下面的脚本中,它显示了“关键字”附近的不正确语法,如“”。我使用CASE语句检查F_TEXT_CODE>10的长度。如果长度>10,则我使用like运算符,如果长度小于10,则使用“=”运算符。 如何在何处条件下实现此逻辑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
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: