2017-04-21 39 views
1

我現在正在努力學習一下SQL查詢。我想知道有人可以幫忙嗎?使用WHEN或IF語句的SQL語句

我想傳遞一個字符串存儲過程中的一個,並根據我想在WHERE子句

稍微修改查詢帕拉姆字符串可以爲任意字母或類別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是否只包含通過'Z'的'A'

+0

非常感謝您的輸入。對於A-Z和All選項似乎工作正常,但是當我提供catid時,沒有結果。 –

+0

SELECT Product.ProdID, Product.ProdImgThumbnailLoc, Product.ProdImgThumbnailAltText FROM 產品分類 INNER JOIN產品。ProductCategory.ProdID = Product.ProdID INNER JOIN類別ON ProductCategory.CatID = Category.CatID WHERE Product.ProdShowOnWeb = 1 AND Category.ShowOnReport = 1 AND Category.CatId ='PERS'---這個返回結果 –

+1

@Alphabet varchar(3)='ALL' - 問題是這條線,我增加了寬度和它的工作現在可以 !! –