2009-09-08 6 views
1

У меня есть хранимая процедура со следующим кодом.case statement in where where

alter PROCEDURE [dbo].[usp_Product_GetProductByCategoryID] 


@CategoryID uniqueidentifier, 
@IsCategory bit=0 
AS 
    BEGIN 

    SELECT  ProductId, ProductCode, ProductName, MRP, MaxDiscount, 
       ShortDescription, ThumbNailImagePath,ThumbNailImagePath1, 
       FullImagePath, IsActive, NoOfBuyer, 
       LongDescription, BrandID, SubCategoryID, CreatedDate, 
       LargeThumbnailImagePath, VideoPath 

    FROM   TBM_Product 

    WHERE (case @IsCategory 
      when 0 then TBM_Product.SubCategoryID 
      when 1 then TBM_Product.CategoryID 
     end) 
      = @CategoryID 

    *AND (case 
     when @IsCategory= 0 then TBM_Product.SubCategoryID = TBM_Product.SubCategoryID 
     when @IsCategory= 1 then TBM_Product.SubCategoryID is null 
     end)* 

END 

что я хочу

если (@ IsCategory = 1), то

TBM_Product.SubCategoryID is null 

еще

void this and condition 

как достичь this.I я получаю «неправильный синтаксис около = "при компиляции вышеуказанной хранимой процедуры.

+0

Из вашего кода кажется, что вы пытаетесь установить переменную @CategoryID в предложении WHERE ??? – Kane

ответ

3

Там нет необходимости использовать случай заявление в вашем где предложение. Вместо этого используйте операторы AND/OR.

ALTER PROCEDURE [dbo].[usp_Product_GetProductByCategoryID] 
    @CategoryID uniqueidentifier , 
    @IsCategory bit = 0 
AS 
BEGIN 

SELECT [ProductId], 
     [ProductCode], 
     [ProductName], 
     [MRP], 
     [MaxDiscount],  
     [ShortDescription], 
     [ThumbNailImagePath], 
     [ThumbNailImagePath1], 
     [FullImagePath], 
     [IsActive], 
     [NoOfBuyer], 
     [LongDescription], 
     [BrandID], 
     [SubCategoryID], 
     [CreatedDate], 
     [LargeThumbnailImagePath], 
     [VideoPath], 
     @CategoryID = CASE @IsCategory 
         WHEN 0 THEN TBM_Product.SubCategoryID 
         WHEN 1 THEN TBM_Product.CategoryID 
         END 
FROM [dbo].[TBM_Product] 
WHERE (@IsCategory = 0 AND TBM_Product.SubCategoryID = TBM_Product.SubCategoryID) 
     OR (@IsCategory= 1 AND TBM_Product.SubCategoryID IS NULL) 
END 
+0

Ницца. Мне это нравится. –

+0

Эта часть: «И TBM_Product.SubCategoryID = TBM_Product.SubCategoryID» на самом деле не нужна, поскольку они являются одним и тем же полем, если только я чего-то не хватает. – patmortech

+0

И TBM_Product.SubCategoryID = TBM_Product.SubCategoryID добавляется в void предложение where i.e where (1 = 1) – Rohit

1

SELECT ... CASE не работает в условиях WHERE, и они не работают, как вы его написали. Вы должны изменить свой запрос и записать условие, как это -

... 
WHERE 
    (@IsCategory= 0 AND TBM_Product.SubCategoryID = TBM_Product.SubCategoryID) 
    OR 
    (@IsCategory= 1 AND TBM_Product.SubCategoryID IS NULL) 
0

попробовать

and ((@Iscategory=1 and TBM_Product.SubCategoryID is null) 
    or 
    (@Iscategory = 0))