程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> SQL Server樹型結構數據處理的存儲過程

SQL Server樹型結構數據處理的存儲過程

編輯:關於SqlServer

我們在平常的系統開發中常常會遇到像無限級分類這樣的樹型結構數據,現提供一個可用的數據庫存儲過程,可以完成樹型結構數據的排序。

環境:Windows7+SQL Server 2008

說明:下面代碼已經轉換成SQL Server2000的腳本,處理效果如下,看sortname字段結果,代碼經過測試。

 創建樹型表

以下為引用的內容:

CREATE TABLE [dbo].[categorIEs](
    [category_id] [int] IDENTITY(1,1) NOT NULL
,
    [parent_id] [int] NULL
,
    [category_name] [varchar](500) NULL
,
CONSTRAINT [PK_categorIEs] PRIMARY KEY CLUSTERED

(
    [category_id] ASC

) ON [PRIMARY]
) ON [PRIMARY]
GO

插入測試數據

以下為引用的內容:

INSERT [dbo].[categorIEs] ([category_id], [parent_id], [category_name]) VALUES (1, 0, CONVERT(TEXT, N'A'))
INSERT [dbo].[categorIEs] ([category_id], [parent_id], [category_name]) VALUES (2, 0, CONVERT(TEXT, N'B'
))
INSERT [dbo].[categorIEs] ([category_id], [parent_id], [category_name]) VALUES (3, 1, CONVERT(TEXT, N'AA'
))
INSERT [dbo].[categorIEs] ([category_id], [parent_id], [category_name]) VALUES (4, 3, CONVERT(TEXT, N'AAA'
))
INSERT [dbo].[categorIEs] ([category_id], [parent_id], [category_name]) VALUES (5, 2, CONVERT(TEXT, N'BB'
))
INSERT [dbo].[categorIEs] ([category_id], [parent_id], [category_name]) VALUES (6, 1, CONVERT(TEXT, N'AA2'
))
INSERT [dbo].[categorIEs] ([category_id], [parent_id], [category_name]) VALUES (7, 1, CONVERT(TEXT, N'AA3'
))
INSERT [dbo].[categorIEs] ([category_id], [parent_id], [category_name]) VALUES (8, 3, CONVERT(TEXT, N'AAA2'
))
INSERT [dbo].[categorIEs] ([category_id], [parent_id], [category_name]) VALUES (9, 4, CONVERT(TEXT, N'AAA3'
))
INSERT [dbo].[categorIEs] ([category_id], [parent_id], [category_name]) VALUES (10, 2, CONVERT(TEXT, N'BB2'))

創建存儲過程,表中的level為級別深度,通過生成的臨時表與分類表關聯顯示結果。

以下為引用的內容:

CREATE PROCEDURE [dbo].[Get_TreeData]
AS
BEGIN
    --創建臨時表
    create table #tmp_table (id int,[level] int)
   
    declare @LevelValue int
  
    set @LevelValue=0
  
    insert #tmp_table select 0,@LevelValue

    --將數據寫入到臨時表
    while @@rowcount>0  
    begin
  
      set @LevelValue=@LevelValue+1
  
      insert #tmp_table select a.category_id,@LevelValue
  
      from categorIEs as a,#tmp_table as
b  
      where a.parent_id=b.[id] and b.[level]=@LevelValue-1
  
    end
  
    --select * from #tmp_table

    select a.category_id,a.parent_id,a.category_name,b.[level],  
        case
    
            when a.parent_id=0 then a.category_name else replicate('-',b.[level])+
a.category_name    
    end as
sortname   
    from categorIEs as a join #tmp_table as b on a.category_id=
b.id  
    order by
sortname
    return

END

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved