category 表:categoryid     categoryname    parentid
1              新闻            0
2              文化            0
3              国内            1
4              国际            1
5              广东            3
6              广西            3
7              广州            5
当 categoryid 输入 7 时,显示以下结果:1              新闻            0
3              国内            1
5              广东            3
7              广州            5
当 categoryid 输入 3 时,显示以下结果:1              新闻            0
3              国内            1
当 categoryid 输入 1 时,显示以下结果:1              新闻            0

解决方案 »

  1.   

    也就是根据当前 categoryid 列出分类的路径出来.
      

  2.   

    CREATE TABLE category
    (
    categoryid INT,
    categoryname NVARCHAR(20),
    parentid INT
    )
    GOINSERT INTO category SELECT 1,'新闻',0
    UNION ALL SELECT 2,'文化',1
    UNION ALL SELECT 3,'国内',1
    UNION ALL SELECT 4,'国际',3
    UNION ALL SELECT 5,'广东',3
    UNION ALL SELECT 6,'广西',5
    UNION ALL SELECT 7,'广州',5
    GOCREATE PROCEDURE proc_catetory @id INT
    AS
    DECLARE @pid INT
    DECLARE @count VARCHAR(50)
    SET @count='0'
    Label:
    SELECT @pid=parentid
    FROM category
    WHERE categoryid=@id
    WHILE EXISTS(SELECT 1 FROM category WHERE categoryid=@id)
    BEGIN
            SET @count=@count+CAST(@id AS VARCHAR(5))
            SET @id=@pid  
            GOTO Label
    ENDSET @count= CAST(CAST(@count AS INT) AS VARCHAR(50))
    SELECT * 
    FROM category
    WHERE CHARINDEX(CAST(categoryid AS VARCHAR(5)),@count)<>0EXEC proc_catetory 7
    categoryid  categoryname         parentid    
    ----------- -------------------- ----------- 
    1           新闻                   0
    3           国内                   1
    5           广东                   3
    7           广州                   5
      

  3.   

    ---用函数Try:
    Create Function Fn_Get(@id int)
       Returns @T Table(categoryid int,
                       categoryname varchar(10),parentid int)
    As
       Begin
          Insert @T Select * From category Where categoryid=@id
          Select @id=parentid From category Where categoryid=@id
          While @@rowcount>0
                Begin
                  Insert @T Select * From category Where categoryid=@id
                  Select @id=parentid From category Where categoryid=@id
                End
          Return 
       End
    Go
    ---调用函数查询结果
    Select * From dbo.Fn_Get(7) Order By categoryid
      

  4.   

    ---创建测试数据
    Create Table category(categoryid int,
                categoryname varchar(10),parentid int)
      Insert category Select 1,      '新闻',        0
            Union All Select 2,      '文化',        0
            Union All Select 3,      '国内',        1
            Union All Select 4,      '国际',        1
            Union All Select 5,      '广东',        3
            Union All Select 6,      '广西',        3
            Union All Select 7,      '广州',        5Select * From category
    ---创建函数
    Create Function Fn_Get(@id int)
       Returns @T Table(categoryid int,
                       categoryname varchar(10),parentid int)
    As
       Begin
          Insert @T Select * From category Where categoryid=@id
          Select @id=parentid From category Where categoryid=@id
          While @@rowcount>0
                Begin
                  Insert @T Select * From category Where categoryid=@id
                  Select @id=parentid From category Where categoryid=@id
                End
          Return 
       End
    Go    
    ---调用函数查询结果
    Select * From dbo.Fn_Get(7) Order By categoryid 
    /*
    categoryid  categoryname parentid    
    ----------- ------------ ----------- 
    1           新闻           0
    3           国内           1
    5           广东           3
    7           广州           5(所影响的行数为 4 行)   
    */
      

  5.   

    ---调用函数查询结果
    Select * From dbo.Fn_Get(3) Order By categoryid 
    /*
    categoryid  categoryname parentid    
    ----------- ------------ ----------- 
    1           新闻           0
    3           国内           1(所影响的行数为 2 行) 
    */
      

  6.   

    函数的形式比较好理解一点. thanks....
      

  7.   

    光thanks有什么用
    好理解有什么用,
    无语....