下面是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'
)
我试过一个条件(硬编码),然后用两个,后来所有三个。一切都很好。我想通过粘贴上面的查询来获得相同的结果,但有些显然是错误的。我究竟做错了什么?
整个过程:
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