2017-04-21 37 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' - 问题是这条线,我增加了宽度和它的工作现在可以 !! –