Ниже приведена часть запроса SQL Server, который не работает должным образом. Я не знаю, почему, но условие проходит через эту часть, как ничто не вставлено (как и все три условия, установлены в NULL). Что я здесь делаю неправильно?Состояние SQL Server не работает
Входные параметры хранимой процедуры:
@cStockPacked varchar(1) = NULL,
@cWrittenDown varchar(1) = NULL,
@cInPreparation varchar(1) = NULL
Часть запроса, который не работает:
(
(@cStockPacked IS NULL OR
(@cStockPacked = '1' AND MEST.MEST_STA = '1')
)
OR
(@cInPreparation IS NULL OR
(@cInPreparation = '1' AND MEST.MEST_STA = '2')
)
OR
(@cWrittenDown IS NULL OR
(@cWrittenDown = '1' AND MEST.MEST_STA = '4')
)
)
Я пытался жестких условиях кода, все работало, как ожидалось:
(
MEST.MEST_STA = '1' OR MEST.MEST_STA = '2' OR MEST.MEST_STA = '4'
)
Я пробовал с одним условием (hardcoded), затем с двумя, а затем со всеми тремя. Все было хорошо. Я хочу добиться того же результата с помощью вставленного выше вопроса, но что-то явно не так. Что я делаю не так?
Вся процедура:
ALTER PROCEDURE [dbo].[sp_CAMERC_HLP]
( , @cStockPacked varchar(1) = NULL
, @cWrittenDown varchar(1) = NULL
, @cInPreparation varchar(1) = NULL
)
AS
BEGIN
SELECT
MEST.MEST_QUA, MERC_STA, MERC_NME,
MERC_DES, MERC_NTO, MERC_UNI, MERC_LPR,
MERC.UNIT_KEY,
COUNT_ALL_ROWS = COUNT(*) OVER()
FROM
CAMERC MERC
INNER JOIN
CAMEGR CAMEGR ON MERC.MEGR_KEY = CAMEGR.MEGR_KEY
INNER JOIN
CAMEST MEST ON MERC.MERC_KEY = MEST.MERC_KEY
WHERE
(@cMERC_NME IS NULL OR MERC_NME LIKE '%' + @cMERC_NME + '%')
AND
(@iMEGR_KEY IS NULL OR MERC.MEGR_KEY IN (SELECT MEGR_KEY FROM CTE))
AND
(@cMERC_CDO1 IS NULL OR MERC_CDO1 LIKE '%' + @cMERC_CDO1 + '%')
AND
and
(
(@cStockPacked IS NULL OR @cStockPacked = '1' AND MEST.MEST_STA = '1')
OR
(@cInPreparation IS NULL OR (@cInPreparation = '1' AND MEST.MEST_STA = '2'))
OR
(@cWrittenDown IS NULL OR (@cWrittenDown = '1' AND MEST.MEST_STA = '4'))
)
END
Думайте, что вам нужно будет показать больше запросов, чем это, людям понадобится контекст, чтобы понять, в чем проблема. Например, как определяется @cStockPacked – Flexicoder
Я не совсем понимаю вопрос. Код, который «не работает», реализует другую логику из кода, который «работает». Я не удивлен, что разная логика дает разные результаты. –
Почему другая логика? Я просто жестко определил, что я хотел бы выйти из условия. – FrenkyB