2017-04-21 6 views
1

現時点では、私のSQLクエリで少し苦労しています。誰かが助けることができるのだろうか?私はWHERE句WHENまたはIF文を使用するSQL文

に少しクエリを修正したいとストアドプロシージャのいずれかに文字列を渡すしようとに基づいています

のparam文字列は、アルファベットやカテゴリIDのどちらかである可能性があり

ALTER procedure [dbo].[procProductShow] 
    @Alphabet varchar(3) = 'ALL' 
AS 
    IF @Alphabet = 'ALL' or @Alphabet = 'A' OR @Alphabet = 'B' OR @Alphabet = 'C' --- UNTIL Z 
     SELECT 
      Product.ProdID, 
      Product.ProdImgThumbnailLoc, 
      Product.ProdImgThumbnailAltText 

     FROM 
      ProductCategory 
      INNER JOIN Product ON ProductCategory.ProdID = Product.ProdID 
      INNER JOIN Category ON ProductCategory.CatID = Category.CatID 

     WHERE 
      Product.ProdShowOnWeb = 1 AND 
      Category.ShowOnReport = 1 AND    
      (@Alphabet = 'ALL' OR Product.ProdHeading LIKE @Alphabet + '%')  
     ORDER BY Product.ProdHeading 

    ELSE 
     SELECT 
      Product.ProdID, 
      Product.ProdImgThumbnailLoc, 
      Product.ProdImgThumbnailAltText 

     FROM 
      ProductCategory 
      INNER JOIN Product ON ProductCategory.ProdID = Product.ProdID 
      INNER JOIN Category ON ProductCategory.CatID = Category.CatID    
     WHERE 
      Product.ProdShowOnWeb = 1 AND 
      Category.ShowOnReport = 1 AND    
      Category.CatId = @Alphabet   
     ORDER BY Product.ProdHeading 
+0

あなたのエラー/問題は何ですか? –

+0

mysqlまたはsql server? –

+0

これはMicrosoft SQL Serverです。 MySQLのような関係のないデータベースでタグ付けしないでください。 – tadman

答えて

0

あなたが長いIFステートメントを実行する必要がないように、あなたが実際にこのクエリを簡素化することができます。

ALTER procedure [dbo].[procProductShow] 
    @Alphabet varchar(3) = 'ALL' 
AS 
    SELECT 
     Product.ProdID, 
     Product.ProdImgThumbnailLoc, 
     Product.ProdImgThumbnailAltText 
    FROM 
     ProductCategory 
     INNER JOIN Product ON ProductCategory.ProdID = Product.ProdID 
     INNER JOIN Category ON ProductCategory.CatID = Category.CatID 
    WHERE 
     Product.ProdShowOnWeb = 1 AND 
     Category.ShowOnReport = 1 AND    
     (@Alphabet = 'ALL' 
      OR (@Alphabet LIKE '[A-Z]' AND Product.ProdHeading LIKE @Alphabet + '%') 
      OR Category.CatId = @Alphabet) 
    ORDER BY Product.ProdHeading 

トンの@Alphabet LIKE '[A-Z]'一部を@Alphabetに 'A'から 'Z'のみが含まれているかどうかをチェックする正規表現を実行する条件はどこですか?

+0

ありがとうございました。それは、A - Zとすべてのオプションのために働いているようだが、私はcatid、ない結果を提供するとき。 –

+0

ProductCategory.CatID = Category.CatID WHERE Product.ProdShowOnWeb ONカテゴリJOIN ProductCategory インナーProductCategory.ProdID = Product.ProdID INNER JOINで製品を FROM Product.ProdID、 Product.ProdImgThumbnailLoc、 Product.ProdImgThumbnailAltTextを選択= 1 AND Category.ShowOnReport = 1 AND Category.CatId = 'PERS' ---この返品結果 –

+1

@Alphabet varchar(3)= 'ALL' - 問題はこの行で、幅と作業記号を増やしました今いいよ !! –