在開發中經常會遇到無限級分類的問題,最常見的是一些無限級目錄之類的,如果你對SQL Server還不是太熟悉或者還不太熟悉SQL語言的話,這將是一件很困難的事情,也許你最後能實作類別似的功能,不過可能花費的時間很長,效率也不是很理想,下面的樣本也許能給你一個啟示。
/***建立表****/
CREATE TABLE [dbo].[Tree] (
[ID] [int] IDENTITY (1, 1) NOT NULL ,
[PID] [int] NULL ,
[Name] [varchar] (10) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
/****建立自訂函數****/
CREATE FUNCTION dbo.fGetTreeTable
(
@ID int= null
)
RETURNS @Tab TABLE(ID int, PID int, Name varchar(10), Lev int)--返回結果的表結構
AS
BEGIN
Declare @lev int
Set @lev=0
While @lev=0 or @@ROWCount>0
Begin
Set @Lev=@Lev+1
Insert @Tab(ID, PID, Name, Lev)
Select ID, PID, Name, @Lev From Tree Where (@Lev=1 and ((PID=@ID) or (@ID is null and PID is null))) or (PID in (Select ID From @Tab Where Lev=@Lev-1))
order by ID
End
RETURN
END
直接查詢Select * from dbo.fGetTreeTable(null)就可以輸入所有記錄。
說明:本文轉載自:http://drc.cnblogs.com/articles/269062.html,如有問題可以向原作者提出。