- 论坛徽章:
- 0
|
不知道我給的列子對不對但是我認為還是可以的大家看看
建立測試環境
create table biao(parent char(50),child char(50))
insert into biao values (\'World \',\'Europe\')
insert into biao values (\'World \',\'North America\')
insert into biao values (\'Europe\',\'France \')
insert into biao values (\'France \',\'Paris\')
insert into biao values (\'North America\',\'United States\')
insert into biao values (\'North America\',\'canada\')
insert into biao values (\'United States\',\'New York\')
insert into biao values (\'United States\',\'Washington\')
insert into biao values (\'New York\',\'New York City\')
insert into biao values (\'Washington\',\'Redmond\')
select * from biao
儲存過成
CREATE PROCEDURE expand1 (@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 = 1
WHILE @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 biao
WHERE parent = @current
IF @@ROWCOUNT > 0
SELECT @level = @level + 1
END
ELSE
SELECT @level = @level - 1
END -- WHILE
咝衑xec expand1 world
結果
world
North America
canada
United States
Washington
Redmond
New York
New York City
Europe
France
Paris
刪除環境
drop proc expand1
drop table biao |
|