• In case anyone is interested, Listed below is a bottom-up version of the proc:

    CREATE PROCEDURE dbo.DisplayBottomUpTableHierarchy(

     @TableName VARCHAR(128),

     @SpaceLen INT = -4 OUTPUT)

    AS

    BEGIN

     DECLARE @child VARCHAR(100)

     SET @SpaceLen = @SpaceLen + 4

     

     IF @TableName IS NOT NULL

     BEGIN

      IF EXISTS(SELECT * FROM sysforeignkeys WHERE fkeyid = OBJECT_ID(@TableName))

      BEGIN

             IF @SpaceLen <= 0

              PRINT @TableName

       ELSE

        PRINT SPACE(@SpaceLen) + '|---' + @TableName

             IF EXISTS(SELECT * FROM sysforeignkeys WHERE fkeyid = OBJECT_ID(@TableName) AND fkeyid = rkeyid)

                 PRINT SPACE(@SpaceLen) + '|---' + @TableName

             DECLARE curChild CURSOR LOCAL FOR

        SELECT OBJECT_NAME(rkeyid) AS child FROM sysforeignkeys

        WHERE fkeyid = OBJECT_ID(@TableName) AND fkeyid <> rkeyid

             OPEN curChild

       FETCH NEXT FROM curChild INTO @child

       WHILE @@fetch_status = 0

       BEGIN

        EXEC DisplayBottomUpTableHierarchy

          @TableName = @child,

          @SpaceLen = @SpaceLen OUTPUT

        FETCH NEXT FROM curChild into @child

       END

       CLOSE curChild

       DEALLOCATE curChild

      END

      ELSE

      BEGIN

             IF @SpaceLen <= 0

              PRINT @TableName

       ELSE

        PRINT SPACE(@SpaceLen) + '|---' + @TableName

      END

     END

     SET @SpaceLen = @SpaceLen - 4

     RETURN

    END