关键字“IF”附近的语法不正确

Kum*_*rav 1 sql sql-server

我试图将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
  )
Run Code Online (Sandbox Code Playgroud)

Mic*_*ski 5

您不能IF以这种方式使用内部子选择。相反,使用 an来测试子句中AND变量的值。这将需要两个组之间具有逻辑关系。@categoryIDWHERE()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
))
Run Code Online (Sandbox Code Playgroud)