需要用到树形结构,在看了
http://www.cnblogs.com/zplutor/archive/2009/07/31/1536146.html,原作只说了大概思路,让人费解,下面用比较清晰的过程描述下:
表结构:
lib_items:
version_id | item_id | parent_id | desc |
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树形框架是一种常见的Web应用程序开发技术,用于构建层次结构的数据展示和交互。这个Demo展示了如何结合这两种技术来创建一个可扩展、动态的树状视图,这在网站导航、组织结构显示或者文件目录...
本文将通过一个具体的示例来介绍如何在SQL Server 2005环境中使用`WITH`语句来实现树形结构的查询。 #### 创建表及基础数据 首先,我们需要创建一张用于存储节点信息的基础表。这里以`tb`为例: ```sql IF EXISTS...
在SQL Server中,实现树形结构递归查询是数据库管理中的常见需求,特别是在处理具有层级关系的数据时,如无限级分类。SQL Server 2005及以后版本引入了公用表表达式(CTE,Common Table Expression)来支持递归查询...
在这个项目中,SQL脚本可能用于在数据库中创建表、插入数据、更新记录或删除记录,与树形结构的增删改查功能相呼应。 7. **刷新功能**: - 刷新功能确保用户看到的树形结构始终与数据库中的数据同步。这可能涉及到...
- 使用递归或者迭代方法构建树形结构,如`TreeNode`类 - 将构建好的树形结构绑定到控件,如TreeView控件 **5. TreeView控件** - TreeView是ASP.NET中的一个服务器控件,可以用来显示多层的层次结构 - 配置TreeView...
最后,如果你在使用过程中遇到任何问题,或者有其他关于SQL Server树形结构查询的需求,请随时提问,我们会尽心尽力提供帮助。感谢你对我们的支持,我们会持续提供更多的技术文章和解决方案来帮助大家解决问题。
树形结构处理在SQL Server中是指利用T-SQL来管理和查询那些以树状形式展现的层次性数据。 文档《Microsoft SQL Server中T-SQL关于树(层次)结构的处理研究》主要探讨了在SQL Server中使用T-SQL来处理树形数据结构的...
为了展示无限级树形菜单,我们可以使用编程语言(如Java、C#、Python等)与数据库交互,将查询结果转换成树形结构。这通常涉及递归函数,遍历查询结果并构建树节点。每个节点包含其自身的属性(如名称、URL等),...
通过遍历查询结果并根据关联字段创建节点层次,可以构建出完整的树形结构。 最后,"c#_sqlserver操作"和"mysql_c#例子"表明压缩包中可能包含了使用C#操作SQL Server和MySQL数据库的实例。在C#中,针对不同的数据库...
这个项目“JSP+Mysql实现的简单树形结构”就是一个典型的例子,它结合了Java服务器页面(JSP)和MySQL数据库来创建一个直观的数据展示方式。以下是关于这个项目的详细知识点: 1. **JSP(Java Server Pages)**:...
在这个项目中,树形结构的节点数据将存储在MySQL数据库中,通过SQL语句进行CRUD(Create, Read, Update, Delete)操作。 5. **树形结构**:树形结构是一种数据结构,其中每个节点可以有零个或多个子节点。在本项目...
2. **对象资源管理器**:这是SSMS的核心组成部分,它提供了一个树形视图,展示服务器上的所有数据库对象,如表、视图、存储过程、触发器等,方便用户进行浏览、选择和操作。 3. **Transact-SQL编辑器**:SSMS内置了...
在本项目“C#语言下的树形结构”中,开发者使用Microsoft的Visual Studio 2005(简称VS2005)作为集成开发环境,以及SQL Server 2000作为后端数据库来实现这种结构。这里我们将深入探讨C#中树形结构的实现、VS2005的...
2. **动态树形结构**:在前端,JavaScript库如JQuery、AngularJS或React可以帮助创建动态的UI。对于树形结构,可以利用jQuery UI的Treeview插件,或者使用更现代的库如D3.js或Angular Material的Tree组件。这些库...
3. 数据库操作:在连接成功后,用户可以在左侧的数据库树形结构中看到已连接的数据库,右键单击数据库可以进行新建表、视图、存储过程等操作。 4. SQL编写:在顶部菜单栏选择“查询”,打开SQL编辑器,输入SQL语句...
- **层次模型**:以树形结构表示数据,每个记录有一个父记录,可有多个子记录。 - **网状模型**:用网络结构表示实体及其关系,允许任意两个实体之间存在多对多的联系。 - **关系模型**:最常用,采用二维表格...
1. **对象资源管理器**:提供了一种树形结构视图,便于浏览数据库服务器中的所有对象。 2. **查询编辑器**:支持编写、调试和执行 Transact-SQL 查询语句。 3. **脚本生成**:能够将现有对象导出为 SQL 脚本,方便...
首先,`dtree`通常指的是Dynamic Tree,一种动态生成树形结构的JavaScript库,常用于构建可交互的网页目录。在本项目中,开发者可能对原版的dtree进行了定制或扩展,使其适应特定的业务需求,例如添加新的功能、优化...