`

sql server 树形结构的创建

阅读更多
需要用到树形结构,在看了http://www.cnblogs.com/zplutor/archive/2009/07/31/1536146.html,原作只说了大概思路,让人费解,下面用比较清晰的过程描述下:
表结构:
lib_items:
version_iditem_idparent_iddesc


1
  1.1
    1.1.1
    1.1.2 
  1.2
2
3
4

思路:
1.先将1,2,3,4设为第0级,放到临时表#TreeViewTemp
此时结构#TreeViewTemp为:
[0] 1
[0] 2    
[0] 3
[0] 4

2.再将1的子查出,设置子的level为+1,将1.1,1.2放到临时表#TreeViewTemp,将1放到结果表#TreeViewResult,删掉1,设置level=level+1
此时结构#TreeViewTemp为:
[0] 2    
[0] 3
[0] 4
[1] 1.1
[1] 1.2

此时结构#TreeViewResult为:
1
   
3.查询level为1的第一个item,查到1.1,查询1.1的子为1.1.1,1.1.2,设置level为2放到临时表#TreeViewTemp,将1.1放到结果表#TreeViewResult,在临时表中删掉1.1,设置level=level+1
此时结构#TreeViewTemp为:
[0] 2    
[0] 3
[0] 4
[1] 1.2
[2] 1.1.1
[2] 1.1.2

此时结构#TreeViewResult为:
1
   1.1

4.查询level为2的第一个item,查到1.1.1,查询1.1.1的子为空,将1.1.1放到结果表#TreeViewResult,在临时表中删掉1.1.1,设置level=level+1
此时结构#TreeViewTemp为:
[0] 2    
[0] 3
[0] 4
[1] 1.2
[2] 1.1.2

此时结构#TreeViewResult为:
1
  1.1
    1.1.1

5.查询level为3的,为空,level-1,进入下一次,树结构没变
6.查询level为2的第一个item,查询到1.1.2,查询1.1.2的子为空,将1.1.2放到结果表#TreeViewResult,在临时表中删掉1.1.2,设置level=level+1
此时结构#TreeViewTemp为:
[0] 2    
[0] 3
[0] 4
[1] 1.2

此时结构#TreeViewResult为:
1
  1.1
    1.1.1
    1.1.2

7,count一直减到1,操作1.2的,以此类推,最终结果会是:
此时结构#TreeViewResult为:
1
  1.1
    1.1.1
    1.1.2 
  1.2
2
3
4

完整代码如下:
ALTER PROCEDURE [dbo].[sp_items_level_test]
	@versionId			varchar(30)
AS
BEGIN
	DECLARE @item_id varchar(20), @Level int;
	SET @Level = 0

	CREATE TABLE #TreeViewTemp
	(
	 item_id varchar(20) NOT NULL,
	 desc nvarchar(500) NOT NULL,
	 parent_id varchar(20) NULL,
	 [Level] int NOT NULL
	)
	CREATE TABLE #TreeViewResult
	(
	 item_id varchar(20) NOT NULL,
	 desc nvarchar(500) NOT NULL
	)

	INSERT #TreeViewTemp
	SELECT item_id, desc, parent_id, @Level
	FROM lib_items
	WHERE parent_id = '' and version_id = @versionId

	WHILE EXISTS (SELECT item_id FROM #TreeViewTemp)
	BEGIN

	 SELECT TOP(1) @item_id = item_id
	 FROM #TreeViewTemp
	 WHERE [Level] = @Level
	 ORDER BY item_id

	 IF @@ROWCOUNT = 0
	 BEGIN
	  SET @Level = @Level - 1
	  CONTINUE
	 END

	 INSERT #TreeViewResult
	 SELECT item_id, SPACE(4 * @Level) + desc0
	 FROM #TreeViewTemp
	 WHERE item_id = @item_id

	 INSERT #TreeViewTemp
	 SELECT item_id, desc, parent_id, @Level + 1
	 FROM lib_items
	 WHERE parent_id = @item_id and version_id = @versionId

	 IF @@ROWCOUNT <> 0
	  SET @Level = @Level + 1
	 
	 DELETE #TreeViewTemp
	 WHERE item_id = @item_id

	END

	SELECT item_id, desc0 FROM #TreeViewResult

	DROP TABLE #TreeViewTemp
	DROP TABLE #TreeViewResult
END
分享到:
评论

相关推荐

    asp.net +SqlServer树形框架

    ASP.NET + SQLServer树形框架是一种常见的Web应用程序开发技术,用于构建层次结构的数据展示和交互。这个Demo展示了如何结合这两种技术来创建一个可扩展、动态的树状视图,这在网站导航、组织结构显示或者文件目录...

    sqlserver实现树形结构递归查询(无限极分类)的方法

    在SQL Server中,实现树形结构递归查询是数据库管理中的常见需求,特别是在处理具有层级关系的数据时,如无限级分类。SQL Server 2005及以后版本引入了公用表表达式(CTE,Common Table Expression)来支持递归查询...

    sql树形结构使用with

    本文将通过一个具体的示例来介绍如何在SQL Server 2005环境中使用`WITH`语句来实现树形结构的查询。 #### 创建表及基础数据 首先,我们需要创建一张用于存储节点信息的基础表。这里以`tb`为例: ```sql IF EXISTS...

    树形结构(增删改查刷新等功能附SQL脚本)

    在这个项目中,SQL脚本可能用于在数据库中创建表、插入数据、更新记录或删除记录,与树形结构的增删改查功能相呼应。 7. **刷新功能**: - 刷新功能确保用户看到的树形结构始终与数据库中的数据同步。这可能涉及到...

    VS2005+sql server2000实现无限级树形菜单

    - 使用递归或者迭代方法构建树形结构,如`TreeNode`类 - 将构建好的树形结构绑定到控件,如TreeView控件 **5. TreeView控件** - TreeView是ASP.NET中的一个服务器控件,可以用来显示多层的层次结构 - 配置TreeView...

    sqlserver 树形结构查询单表实例代码

    最后,如果你在使用过程中遇到任何问题,或者有其他关于SQL Server树形结构查询的需求,请随时提问,我们会尽心尽力提供帮助。感谢你对我们的支持,我们会持续提供更多的技术文章和解决方案来帮助大家解决问题。

    Microsoft SQL Server中T-SQL关于树(层次)结构的处理研究.pdf

    树形结构处理在SQL Server中是指利用T-SQL来管理和查询那些以树状形式展现的层次性数据。 文档《Microsoft SQL Server中T-SQL关于树(层次)结构的处理研究》主要探讨了在SQL Server中使用T-SQL来处理树形数据结构的...

    无限级树形菜单(Sql数据库)

    为了展示无限级树形菜单,我们可以使用编程语言(如Java、C#、Python等)与数据库交互,将查询结果转换成树形结构。这通常涉及递归函数,遍历查询结果并构建树节点。每个节点包含其自身的属性(如名称、URL等),...

    CSharp-SQL.rar_C# sql 查询 txt_C#不让sql换行_c# SQL 树形列表_c# sqlserver操

    通过遍历查询结果并根据关联字段创建节点层次,可以构建出完整的树形结构。 最后,"c#_sqlserver操作"和"mysql_c#例子"表明压缩包中可能包含了使用C#操作SQL Server和MySQL数据库的实例。在C#中,针对不同的数据库...

    JSP+Mysql实现的简单树形结构

    这个项目“JSP+Mysql实现的简单树形结构”就是一个典型的例子,它结合了Java服务器页面(JSP)和MySQL数据库来创建一个直观的数据展示方式。以下是关于这个项目的详细知识点: 1. **JSP(Java Server Pages)**:...

    BS树形结构(jsp+mysql数据库+设计文档)

    在这个项目中,树形结构的节点数据将存储在MySQL数据库中,通过SQL语句进行CRUD(Create, Read, Update, Delete)操作。 5. **树形结构**:树形结构是一种数据结构,其中每个节点可以有零个或多个子节点。在本项目...

    SQL Server Management Studio

    2. **对象资源管理器**:这是SSMS的核心组成部分,它提供了一个树形视图,展示服务器上的所有数据库对象,如表、视图、存储过程、触发器等,方便用户进行浏览、选择和操作。 3. **Transact-SQL编辑器**:SSMS内置了...

    C#语言下的树形结构

    在本项目“C#语言下的树形结构”中,开发者使用Microsoft的Visual Studio 2005(简称VS2005)作为集成开发环境,以及SQL Server 2000作为后端数据库来实现这种结构。这里我们将深入探讨C#中树形结构的实现、VS2005的...

    Java动态树形权限菜单JavaScript+SqlServer2005

    2. **动态树形结构**:在前端,JavaScript库如JQuery、AngularJS或React可以帮助创建动态的UI。对于树形结构,可以利用jQuery UI的Treeview插件,或者使用更现代的库如D3.js或Angular Material的Tree组件。这些库...

    navicat for sqlserver

    3. 数据库操作:在连接成功后,用户可以在左侧的数据库树形结构中看到已连接的数据库,右键单击数据库可以进行新建表、视图、存储过程等操作。 4. SQL编写:在顶部菜单栏选择“查询”,打开SQL编辑器,输入SQL语句...

    SQL Server期末考试试卷

    - **层次模型**:以树形结构表示数据,每个记录有一个父记录,可有多个子记录。 - **网状模型**:用网络结构表示实体及其关系,允许任意两个实体之间存在多对多的联系。 - **关系模型**:最常用,采用二维表格...

    SQLServer2005_SSMSEE下载

    1. **对象资源管理器**:提供了一种树形结构视图,便于浏览数据库服务器中的所有对象。 2. **查询编辑器**:支持编写、调试和执行 Transact-SQL 查询语句。 3. **脚本生成**:能够将现有对象导出为 SQL 脚本,方便...

    根据dtree改编的树状目录jsp+sqlserver

    首先,`dtree`通常指的是Dynamic Tree,一种动态生成树形结构的JavaScript库,常用于构建可交互的网页目录。在本项目中,开发者可能对原版的dtree进行了定制或扩展,使其适应特定的业务需求,例如添加新的功能、优化...

Global site tag (gtag.js) - Google Analytics