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
当 categoryid 输入 3 时,显示以下结果:1 新闻 0
3 国内 1
当 categoryid 输入 1 时,显示以下结果:1 新闻 0
1 新闻 0
2 文化 0
3 国内 1
4 国际 1
5 广东 3
6 广西 3
7 广州 5
当 categoryid 输入 7 时,显示以下结果:1 新闻 0
3 国内 1
5 广东 3
7 广州 5
当 categoryid 输入 3 时,显示以下结果:1 新闻 0
3 国内 1
当 categoryid 输入 1 时,显示以下结果:1 新闻 0
(
categoryid INT,
categoryname NVARCHAR(20),
parentid INT
)
GOINSERT 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
GOCREATE 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
ENDSET @count= CAST(CAST(@count AS INT) AS VARCHAR(50))
SELECT *
FROM category
WHERE CHARINDEX(CAST(categoryid AS VARCHAR(5)),@count)<>0EXEC proc_catetory 7
categoryid categoryname parentid
----------- -------------------- -----------
1 新闻 0
3 国内 1
5 广东 3
7 广州 5
Create Function Fn_Get(@id int)
Returns @T Table(categoryid int,
categoryname varchar(10),parentid int)
As
Begin
Insert @T Select * From category Where categoryid=@id
Select @id=parentid From category Where categoryid=@id
While @@rowcount>0
Begin
Insert @T Select * From category Where categoryid=@id
Select @id=parentid From category Where categoryid=@id
End
Return
End
Go
---调用函数查询结果
Select * From dbo.Fn_Get(7) Order By categoryid
Create Table category(categoryid int,
categoryname varchar(10),parentid int)
Insert category Select 1, '新闻', 0
Union All Select 2, '文化', 0
Union All Select 3, '国内', 1
Union All Select 4, '国际', 1
Union All Select 5, '广东', 3
Union All Select 6, '广西', 3
Union All Select 7, '广州', 5Select * From category
---创建函数
Create Function Fn_Get(@id int)
Returns @T Table(categoryid int,
categoryname varchar(10),parentid int)
As
Begin
Insert @T Select * From category Where categoryid=@id
Select @id=parentid From category Where categoryid=@id
While @@rowcount>0
Begin
Insert @T Select * From category Where categoryid=@id
Select @id=parentid From category Where categoryid=@id
End
Return
End
Go
---调用函数查询结果
Select * From dbo.Fn_Get(7) Order By categoryid
/*
categoryid categoryname parentid
----------- ------------ -----------
1 新闻 0
3 国内 1
5 广东 3
7 广州 5(所影响的行数为 4 行)
*/
Select * From dbo.Fn_Get(3) Order By categoryid
/*
categoryid categoryname parentid
----------- ------------ -----------
1 新闻 0
3 国内 1(所影响的行数为 2 行)
*/
好理解有什么用,
无语....