簡體   English   中英

關鍵字'IF'附近的語法不正確

[英]Incorrect syntax near the keyword 'IF'

我試圖將IF .. ELSE放在WHERE子句中,如下所示,但收到錯誤消息

“關鍵字'IF'附近的語法不正確。'''附近的語法不正確。”

DECLARE @categoryID int

SET @categoryID = 0

SELECT * from SE_Auctions
  WHERE ItemCategoryID IN
  (
   IF @categoryID = 0
     SELECT CategoryID from SE_ItemCategory
   ELSE
     SELECT CategoryID from SE_ItemCategory 
    WHERE ParentID = @categoryID 
          OR CategoryID = @categoryID
  )

您不能以這種方式在子選擇中使用IF 而是使用AND來測試WHERE子句中變量@categoryID的值。 這將需要兩個()組,它們之間具有邏輯OR

WHERE 
-- First case, @categoryID = 0
(@categoryID = 0 AND ItemCategoryID IN (
  SELECT CategoryID from SE_ItemCategory
))
-- Other case, @categoryID <> 0
OR (@categoryID <> 0 AND ItemCategoryID IN (
  SELECT CategoryID from SE_ItemCategory 
    WHERE ParentID=@categoryID OR CategoryID=@categoryID
))

你不能把if放在像這樣的SQL語句的中間。 有幾種方法可以實現這一目標:

--Example 1
DECLARE @categoryID int = 0

SELECT * from SE_Auctions
WHERE 
ItemCategoryID IN
(SELECT CategoryID from SE_ItemCategory where @categoryID=0
union all
SELECT CategoryID from SE_ItemCategory 
    WHERE ParentID=@categoryID OR CategoryID=@categoryID) 

--Example 2
DECLARE @categoryID int = 0

SELECT * from SE_Auctions
WHERE 
(@categoryID=0
and ItemCategoryID IN
(SELECT CategoryID from SE_ItemCategory))
or (@categoryID <> 0
and ItemCategoryID IN
(SELECT CategoryID from SE_ItemCategory 
    WHERE ParentID=@categoryID OR CategoryID=@categoryID))

--Example 3
DECLARE @categoryID int = 0

SELECT * from SE_Auctions
WHERE 
ItemCategoryID IN
(SELECT CategoryID from SE_ItemCategory 
    WHERE ParentID=@categoryID OR CategoryID=@categoryID or @categoryID=0))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM