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