现在有一个产品类别表,如下:
CategoriesID Name ParentID一级产品类别
    二级产品类别
        三级产品类别
            ......
一级产品类别
    二级产品类别
        三级产品类别
            ......
一级产品类别
    二级产品类别
        三级产品类别
            ......另一个产品表,如下:
产品类别ID   产品名称现在要实现的是:在得到任何一个节点的ID后,查询出该节点及所有其子节点包含的所有产品信息以下是我写的存储过程,其他地方都实现了,就这个产品类别没有实现,请各位高级帮帮忙给改改!!!CREATE PROCEDURE [dbo].[Products_AdvancedSeach]
(
@CategoriesID int,
@keyword varchar(50),
@Price1 decimal(10,2),
@Price2 decimal(10,2),
@AddDate1 datetime,
@AddDate2 datetime
)
AS
BEGIN
declare @strSql varchar(8000),@where varchar(8000),@parentID int; SET @where = ' WHERE 1=1 ' SELECT @parentID = ParentID FROM Categories WHERE CategoriesID=@CategoriesID IF(@parentID=1 And @parentID<>' ')
SET @where = @where + ' AND CategoriesID='+CAST(@CategoriesID as varchar) IF(@keyword<>' ')
SET @where = @where + ' AND ProductName Like ''%' + @keyword + '%''' IF(@Price1<>0 AND @Price2<>0)
SET @where = @where + ' AND sale BETWEEN '+CAST(@price1 as varchar)+ ' And ' + CAST(@price2 as varchar) 

IF(@AddDate1<>' ' AND @AddDate2<>' ')
SET @where = @where + ' AND CreateDate BETWEEN '''+ CAST(@AddDate1 as varchar) +''' And '''+ CAST(@AddDate2 as varchar) +''''

SET @strSql='SELECT * FROM PRODUCTS ' + @where + ' ORDER BY CreateDate DESC'
--print @strsql
exec(@strSql)
END

解决方案 »

  1.   


    alter PROCEDURE [dbo].[Products_AdvancedSeach]
    (
        @CategoriesID    int,
        @keyword    varchar(50),
        @Price1    decimal(10,2),
        @Price2    decimal(10,2),
        @AddDate1 datetime,
        @AddDate2 datetime
    )
    AS
    BEGIN
        declare @strSql varchar(8000),@where varchar(8000),@parentID int;    SET @where = ' WHERE 1=1 '
        SELECT @parentID = ParentID FROM Categories WHERE CategoriesID=@CategoriesID
    --这个逻辑可能有错误,@parentID=1???
        IF(@parentID=1 And @parentID<>' ')
        BEGIN
        SET @strSql='WITH temp(CategoriesID,ParentID)
    AS 
    (
    SELECT categoriesID,ParentID FROM Categories WHERE CategoriesID='+CAST(@CategoriesID as VARCHAR(10))+'
    UNION ALL
    SELECT t.CategoriesID,t.ParentID 
    FROM Categories t JOIN temp 
    ON t.ParentID=temp.CategoriesID
    )' 
         SET @where = @where + ' AND CategoriesID IN
    (        
    SELECT CategoriesID FROM temp) 
            '
    END
        IF(@keyword<>' ')
            SET @where = @where + ' AND ProductName Like ''%' + @keyword + '%'''    IF(@Price1<>0 AND @Price2<>0)
            SET @where = @where + ' AND sale BETWEEN '+CAST(@price1 as varchar)+ ' And ' + CAST(@price2 as varchar) 
            
        IF(@AddDate1<>' ' AND @AddDate2<>' ')
            SET @where = @where + ' AND CreateDate BETWEEN '''+ CAST(@AddDate1 as varchar) +''' And '''+ CAST(@AddDate2 as varchar) +''''
        SET @strSql=@strSql+' SELECT * FROM PRODUCTS ' + @where + ' ORDER BY CreateDate DESC'
        --print @strsql
        exec(@strSql)
    END
      

  2.   

    这个是SQL Server 2005可以用的。