0

以下のように句にIF..を入れようとしていますが、エラーメッセージが表示されますELSEWHERE

「キーワード '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
  )
4

2 に答える 2

4

IFそのようにサブセレクト内で使用することはできません。代わりに、を使用して、句内ANDの変数の値をテストします。これには、間に論理がある 2 つのグループが必要です。@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
))
于 2012-05-31T19:01:22.837 に答える
1

ifそのような SQL ステートメントの途中にan を配置することはできません。これを行うには、次の 2 つの方法があります。

--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))
于 2012-05-31T19:02:50.637 に答える