Просто, удалите его из предложений CASE и вставьте непосредственно в предложение WHERE.Если это не так, ВСЕ ветки оператора CASE переходят в FALSE ->, в результате получается CASE ELSE -> 0, который в конце не будет соответствовать = 1
.Так что просто возьмите это за пределы кейса.
Declare @OPV int
Declare @Today_JD int
Declare @DayOfWeek int
SET @Today_JD = dbo.date2jde (convert(varchar(10),getdate(),111)) --today in Julian
SET @DayOfWeek = DATEPART(dw, dbo.jde2date(@Today_JD)) -- Day of week (1 to 7)
UPDATE TESTDTA.F4211 SET SDVR03 = 1
FROM TESTDTA.F4211
WHERE sdkcoo = 30001 and sdsrp1 = 'ITO' and sdsobk > 0 and sdvend > '' and
sddoco = 2606544 and sdlnid = 27000 and
(SDPDDJ - (SELECT IBOPV FROM TESTDTA.F4102 WHERE IBLITM = SDLITM and IBMCU = SDMCU ) >= @Today_JD)
AND
CASE
WHEN (@DayOfWeek = 2) and SDVEND IN (1010,4010) THEN 1
WHEN (@DayOfWeek = 3) and SDVEND IN (110051,110052,2010) THEN 1
WHEN (@DayOfWeek = 4) and SDVEND= 50001) THEN 1
WHEN (@DayOfWeek = 5) and SDVEND= 110034) THEN 1
ELSE 0
END = 1
Я бы пошел дальше и полностью отбросил бы кейс с оператором
Declare @OPV int
Declare @Today_JD int
Declare @DayOfWeek int
SET @Today_JD = dbo.date2jde (convert(varchar(10),getdate(),111)) --today in Julian
SET @DayOfWeek = DATEPART(dw, dbo.jde2date(@Today_JD)) -- Day of week (1 to 7)
UPDATE TESTDTA.F4211 SET SDVR03 = 1
FROM TESTDTA.F4211
WHERE sdkcoo = 30001 and sdsrp1 = 'ITO' and sdsobk > 0 and sdvend > '' and
sddoco = 2606544 and sdlnid = 27000 and
((SDPDDJ - (SELECT IBOPV FROM TESTDTA.F4102 WHERE IBLITM = SDLITM and IBMCU = SDMCU ) >= @Today_JD)
AND (
((@DayOfWeek = 2) and SDVEND IN (1010,4010)) OR
((@DayOfWeek = 3) and SDVEND IN (110051,110052,2010)) OR
((@DayOfWeek = 4) and (SDVEND= 50001)) OR
((@DayOfWeek = 5) and (SDVEND= 110034))
)