下面是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