category 表:
categoryid categoryname parentid
1 新闻 0
2 文化 0
3 国内 1
4 国际 1
5 广东 3
6 广西 3
7 广州 5
当 categoryid 输入 7 时,显示以下结果:
1 新闻 0
3 国内 1
5 广东 3
7 广州 5
CREATE TABLE category
(
categoryidINT,
categorynameNVARCHAR(20),
parentidINT
)
GO
INSERT INTO category SELECT 1,'新闻',0
UNION ALL SELECT 2,'文化',1
UNION ALL SELECT 3,'国内',1
UNION ALL SELECT 4,'国际',3
UNION ALL SELECT 5,'广东',3
UNION ALL SELECT 6,'广西',5
UNION ALL SELECT 7,'广州',5
GO
CREATE PROCEDURE proc_catetory @id INT
AS
DECLARE @pid INT
DECLARE @count VARCHAR(50)
SET @count='0'
Label:
SELECT @pid=parentid
FROM category
WHERE categoryid=@id
WHILE EXISTS(SELECT 1 FROM category WHERE categoryid=@id)
BEGIN
SET @count=@count+CAST(@id AS VARCHAR(5))
SET @id=@pid
GOTO Label
END
SET @count= CAST(CAST(@count AS INT) AS VARCHAR(50))
SELECT *
FROM category
WHERE CHARINDEX(CAST(categoryid AS VARCHAR(5)),@count)<>0
EXEC proc_catetory 7
categoryid categoryname parentid
----------- -------------------- -----------
1 新闻 0
3 国内 1
5 广东 3
7 广州 5
当 categoryid 输入 3 时,显示以下结果:
1 新闻 0
3 国内 1
当 categoryid 输入 1 时,显示以下结果:
1 新闻 0