daijingjie2002(艰苦创业) ,说详细点好么?

解决方案 »

  1.   

    CREATE PROCEDURE expand (@current char(20)) as
    SET NOCOUNT ON
    DECLARE @level int, @line char(20)
    CREATE TABLE #stack (item char(20), level int)
    INSERT INTO #stack VALUES (@current, 1)
    SELECT @level = 1WHILE @level > 0
    BEGIN
       IF EXISTS (SELECT * FROM #stack WHERE level = @level)
          BEGIN
             SELECT @current = item
             FROM #stack
             WHERE level = @level
             SELECT @line = space(@level - 1) + @current
             PRINT @line
             DELETE FROM #stack
             WHERE level = @level
                AND item = @current
             INSERT #stack
                SELECT child, @level + 1
                FROM hierarchy
                WHERE parent = @current
             IF @@ROWCOUNT > 0
                SELECT @level = @level + 1
          END
       ELSE
          SELECT @level = @level - 1
    END -- WHILE
      

  2.   

    下面的 Transact-SQL 过程将一个编码的层次展开到任意深度。尽管 Transact-SQL 支持递归,但是使用临时表作为堆栈来跟踪所有正在处理中的项目(已经开始但尚未结束),将更加有效。某个项目一旦处理完毕,将被从堆栈中删除。当发现新的项目时,这些项目将被添加到堆栈中。
      

  3.   

    daijingjie2002(艰苦创业),给出表结构好么?