当前位置: 代码迷 >> Sql Server >> 存储过程中如果递归匹配检索出大分类和子分类下的文章!哪位大哥帮忙下,万分感谢解决方法
  详细解决方案

存储过程中如果递归匹配检索出大分类和子分类下的文章!哪位大哥帮忙下,万分感谢解决方法

热度:76   发布时间:2016-04-27 13:34:21.0
存储过程中如果递归匹配检索出大分类和子分类下的文章!哪位大哥帮忙下,万分感谢
SQL code
/** * 根据符合条件查询文章数据 @vType 视图类别,1为大类文章视图vNewsMST,2为专题文章视图vSpecMST @SortID  @SpecID  @GroupsID  @NewsTitle  @CreateDateBegin  @CreateDateEnd  */ALTER PROCEDURE [dbo].[NewsListSelectByCondition]    (    @vType int,    @SortID varchar(12),    @SpecID varchar(12),    @GroupsID varchar(12),    @NewsTitle varchar(120),    @CreateDateBegin datetime,    @CreateDateEnd datetime,    @PageSize int,    @CurrentPage int output,    @TotalPage int output,    @TotalRecord int output,    @SortBy varchar(100)    )AS--把所有单引号都替换成两个单引号SET @SortID = REPLACE(LTRIM(RTRIM(@SortID)),'''','''''')SET @SpecID = REPLACE(LTRIM(RTRIM(@SpecID)),'''','''''')SET @GroupsID = REPLACE(LTRIM(RTRIM(@GroupsID)),'''','''''')SET @NewsTitle = REPLACE(LTRIM(RTRIM(@NewsTitle)),'''','''''')SET @SortBy = REPLACE(LTRIM(RTRIM(@SortBy)),'''','''''')IF @SortBy=''BEGIN    SET @SortBy='NewsID DESC'ENDDECLARE @Sql NVARCHAR(2000)DECLARE @SqlCount NVARCHAR(2000)DECLARE @WhereClause NVARCHAR(2000)--判断是专题文章还是系统文章,1为系统文章,2为专题文章IF @vType ='1'BEGINSET @Sql = 'SELECT *,ROW_NUMBER() OVER (ORDER BY ' + @SortBy + ') AS RowID FROM [dbo].[vNewsMST] 'SET @SqlCount = 'SELECT @Count=count(*) FROM [dbo].[vNewsMST] 'ENDELSE IF @vType ='2'BEGINSET @Sql = 'SELECT *,ROW_NUMBER() OVER (ORDER BY ' + @SortBy + ') AS RowID FROM [dbo].[vSpecMST] 'SET @SqlCount = 'SELECT @Count=count(*) FROM [dbo].[vSpecMST] 'ENDSET @WhereClause = 'WHERE DeleteFlag=0 'IF RTrim(@SortID)<>''    SET @WhereClause = @WhereClause + ' AND SortID=''' + @SortID + ''''    SET @WhereClause = @WhereClause + ' OR SortID LIKE ''' + @SortID + '%'''IF RTrim(@SpecID)<>''    SET @WhereClause = @WhereClause + ' AND SpecID=''' + @SpecID + ''''IF RTrim(@GroupsID)<>''    SET @WhereClause = @WhereClause + ' AND GroupsID=''' + @GroupsID + ''''[color=#FF0000]IF RTrim(@NewsTitle)<>''    SET @WhereClause = @WhereClause + ' AND NewsTitle  LIKE ''%' + @NewsTitle + '%'''[/color]IF RTrim(@CreateDateBegin)<>Cast('1900-1-1' AS DateTime)    SET @WhereClause = @WhereClause + ' AND AddDate>=''' + Cast(@CreateDateBegin AS VARCHAR(30)) + ''''IF RTrim(@CreateDateEnd)<>Cast('1900-1-1' AS DateTime)    SET @WhereClause = @WhereClause + ' AND AddDate<=''' + Cast(@CreateDateEnd AS VARCHAR(30)) + ''''SET @SqlCount = @SqlCount + @WhereClauseDECLARE @ParmDefinition nvarchar(100)SET @ParmDefinition = [email protected] int OUTPUT';EXECUTE sp_executesql @SqlCount, @ParmDefinition, @[email protected] OUTPUT;SET @TotalPage=CEILING(CAST(@TotalRecord AS DECIMAL)[email protected])IF @CurrentPage > @TotalPage-1    SET @[email protected]IF @CurrentPage < 0    SET @CurrentPage=0DECLARE @_Start INT, @_End INTSET @_Start = ((@CurrentPage * @PageSize) + 1)SET @_End = (@_Start + @PageSize - 1)SET @Sql = 'SELECT * FROM (' + @Sql + @WhereClause + ') AS TempTable WHERE (RowID >= ' + CAST(@_Start AS VARCHAR(10)) + ') AND (RowID <= ' + CAST(@_End AS VARCHAR(10)) + ')'EXEC sp_executesql @Sql


我的分类结构是
001
001001
001002
001003
002
002001
002002
002003
003
……
很简单的!所以我起初就想用
SQL code
IF RTrim(@SortID)<>''    SET @WhereClause = @WhereClause + ' AND SortID=''' + @SortID + ''''    SET @WhereClause = @WhereClause + ' OR SortID LIKE ''' + @SortID + '%'''


001
001001
001002
001003
下的文章都检索出来匹配,检索出需要的文章,如果用
SET @WhereClause = @WhereClause + ' AND SortID='001''只能检索出父类的文章,却检索不出
001001
001002
001003
下面的文章,不知道怎么办,有没有哪位大哥帮忙下!万分感谢

------解决方案--------------------
SQL code
--BOM算法--产品配件清单查询示例(邹建)CREATE TABLE Item(ID int,Name varchar(10),Wast decimal(2,2))INSERT Item SELECT 1,N'A产品',0.01UNION  ALL  SELECT 2,N'B产品',0.02UNION  ALL  SELECT 3,N'C产品',0.10UNION  ALL  SELECT 4,N'D配件',0.15UNION  ALL  SELECT 5,N'E物料',0.03UNION  ALL  SELECT 6,N'F物料',0.01UNION  ALL  SELECT 7,N'G配件',0.02CREATE TABLE Bom(ItemID int,ChildId int)INSERT Bom SELECT 1,4UNION  ALL SELECT 1,7   --A产品由D配件和G配件组成UNION  ALL SELECT 2,1UNION  ALL SELECT 2,6UNION  ALL SELECT 2,7   --B产品由F物料及G配件组成UNION  ALL SELECT 4,5UNION  ALL SELECT 4,6    --D配件由F物料组成UNION  ALL SELECT 3,2UNION  ALL SELECT 3,1    --C产品由A产品和B产品组成GOCREATE FUNCTION f_Bom(@ItemIDs varchar(1000), --要查询物料清单及生产量的产品编号列表(逗号分隔)@Num   int          --要生产的数量)RETURNS @t TABLE(ItemID int,ChildId int,Nums int,Level int)ASBEGIN    DECLARE @Level int    SET @Level=1    INSERT @t SELECT a.ItemID,a.ChildId,ROUND(@Num/(1-b.Wast),0),@Level    FROM Bom a,Item b    WHERE a.ChildId=b.ID        AND CHARINDEX(','+RTRIM(a.ItemID)+',',',[email protected]+',')>0    WHILE @@ROWCOUNT>0 and @Level<140    BEGIN        SET @[email protected]+1        INSERT @t SELECT a.ItemID,b.ChildId,ROUND(a.Nums/(1-c.Wast),0),@Level        FROM @t a,Bom b,Item c        WHERE a.ChildId=b.ItemID            AND b.ChildId=c.ID            AND [email protected]    END    RETURNENDGO--调用函数展开产品1、2、3的结构及计算生产10个产品时,各需要多少个配件SELECT a.ItemID,ItemName=b.Name,    a.ChildId,ChildName=c.Name,    a.Nums,a.LevelFROM f_Bom('1,2,3',10) a,Item b,Item cWHERE a.ItemID=b.ID    AND a.ChildId=c.IDORDER BY a.ItemID,a.Level,a.ChildId/*ItemID      ItemName   ChildId     ChildName  Nums        Level----------- ---------- ----------- ---------- ----------- -----------1           A产品        4           D配件        12          11           A产品        7           G配件        10          11           A产品        5           E物料        12          21           A产品        6           F物料        12          22           B产品        1           A产品        10          12           B产品        6           F物料        10          12           B产品        7           G配件        10          12           B产品        4           D配件        12          22           B产品        7           G配件        10          22           B产品        5           E物料        12          32           B产品        6           F物料        12          33           C产品        1           A产品        10          13           C产品        2           B产品        10          13           C产品        1           A产品        10          23           C产品        4           D配件        12          23           C产品        6           F物料        10          23           C产品        7           G配件        10          23           C产品        7           G配件        10          23           C产品        4           D配件        12          33           C产品        5           E物料        12          33           C产品        6           F物料        12          33           C产品        7           G配件        10          33           C产品        5           E物料        12          43           C产品        6           F物料        12          4
  相关解决方案