CREATE PROCEDURE fandxiaji
  (@上级ID nvarchar(10))    
AS
begin
SET Nocount On
DECLARE @下级ID nvarchar(10),
        @下级姓名 nvarchar(10)DECLARE cChild CURSOR LOCAL FAST_FORWARD
  FOR
  SELECT 工号, 
         姓名 FROM 人事表
        WHERE 人事表.上级ID=@上级ID 
        ORDER BY 工号
  OPEN cChild
  FETCH cChild INTO @下级ID, @下级姓名  
  WHILE @@Fetch_Status = 0 --游标开始
    BEGIN
      PRINT(SPACE(@@NestLevel * 2) + '+ '+ @下级ID + ' ' + @下级姓名)
      EXEC fandxiaji @下级ID
      FETCH cChild INTO @下级ID, @下级姓名 
    END                    --游标结束
  CLOSE cChild
DEALLOCATE cChild
end
go EXEC fandxiaji '1006'  + 1000 小张
    + 1010 小张1
  + 1002 小红
  + 1004 李好
    + 1003 小明
      + 1001 小李
      + 1008 小平
      + 1009 大李
    + 1005 黄永
打印的时候是一层一层的打,这里打印下级的时候是怎么找到相应的上级,然后插入的。  我想的流程结果是。    +xxxxxx
    +xxxxxxxx
    +xxxxxxxxx
       +xxxxxxx
       +xxxxxxx
         +xxxx
         +xxxxxx

解决方案 »

  1.   

    -- 改一下试试
    CREATE PROCEDURE fandxiaji
      (@上级ID nvarchar(10))    
    AS
    begin
    SET Nocount On
    DECLARE @下级ID nvarchar(10),
            @下级姓名 nvarchar(10)DECLARE cChild CURSOR LOCAL FAST_FORWARD
      FOR
      SELECT 工号, 
             姓名 FROM 人事表
            WHERE 人事表.上级ID=@上级ID 
            ORDER BY 工号
      OPEN cChild
      FETCH cChild INTO @下级ID, @下级姓名  
      WHILE @@Fetch_Status = 0 --游标开始
        BEGIN
          PRINT( '+ '+ @下级ID + ' ' + @下级姓名)
          EXEC fandxiaji @下级ID
          FETCH cChild INTO @下级ID, @下级姓名 
        END                    --游标结束
      CLOSE cChild
    DEALLOCATE cChild
    end
    go