文章分类 | 推荐文章 | 最新文章 | 热点文章 | 最新软件 | 精品软件 | 下载排行 | 推荐下载 | 免费看大片 | WPS | 杀毒软件
清风网络
首 页 软件下载 网络学院 数码学院
QQ 电脑入门 游戏 操作系统 图形处理 办公软件 媒体动画 精文荟萃 工具软件 网络编程 程序开发 网络技术 认证考试 网站建设 文章专栏
当前位置:清风网络学院网络编程数据库无限级分类的非递归实现(存储过程版)
精品推荐
特别推荐
·SQL数据库完全使用手册
·进阶:精妙SQL语句介绍
·sql删除记录
·学习SQL语句之SQL语句大全
·数据备份失败的五个原因及解决办法
·解决SQL Server常见的七个经典问题
·SQL存储过程的概念,创建,调用,管理,删除,优点
·带你轻松接触13个数据库术语
·如何恢复系统数据库如何恢复系统数据库?
·通过实例讲解由浅入深学会存储过程
·学会三个范式快速成为数据库设计的高手
·SQL数据库应聘人员面试时经常被问的问题
·问答:查询分析器不能单步调试的的原因
·数据库基础知识:SQL中的IIF语句详解
·WindowsXP+IIS+PHP5+MySQL5+Zend+GD库+phpMyAdmin+PHPWind 5.3 安装教程
·你知道吗?优化数据库前的十大问题
·自动备份注意事项让你远离误删数据噩梦
·关于MSSQL数据库日志满的快速解决办法
·SQL安全设置攻略
·SQL注入的不常见方法
热点TOP10
·数据结构(C#)_排序算法(冒泡排序)
·通过分析SQL语句的执行计划优化SQL(二)
·在DataTable中查询应该注意的问题
·数据备份失败的五个原因及解决办法
·使用FileWriter可以写UTF-8的解决方法
·SQL存储过程的概念,创建,调用,管理,删除,优点
·教你如何读取Excel数据并导入DB2数据库
·教你简单七招 轻松实现Web数据库的安全
·帮你精细分析各种类型数据库的死锁问题
·通过分析SQL语句的执行计划优化SQL(一)
·学习SQL语句之SQL语句大全
·utl_file使用总结
·SQL数据库完全使用手册
·SQL中查询数据表字段名称的查询语句
·Delphi程序执行时实时生成报表
·玩转Windows桌面图标
·使用设计模式构建通用数据库访问类
·如何用sql语句修改数据表中字段,实现identity(100,1)的递增
·用独立的DLL来存储图片(资源文件)
·编程实例 WebGroupBox(Aspx控件)

无限级分类的非递归实现(存储过程版)

日期:2006年7月25日 作者: 查看:[大字体 中字体 小字体]


或多或少都做过树状目录、产品分类之类的二级或三级菜单,如果遇到更多级的分类,就一般使用递归了。在程序中使用递归或多或少会增加一些性能上的开销。

之前我用ASP.net在程序中实现过非递归的无限级分类目录,但考虑到移植性不强,就改成了存储过程,发出来大家共同研究一下,到目前为止,测试过程中还没发现问题,另外,代码方面没经过什么优化。

通常情况下,我们更多的操作是读取目录,所以,在下面的实现中,读取我们只需要一Select语句就够了,不使用递归,理论上无限级~!
======================================================================
表结构:
表名:Tb_Column
表结构(所有字段非空):
Column_ID     int 主键(注:非标识)
Column_Name   nvarchar(50)分类名称
Parent_ID     int 父分类ID(默认值0)
Column_Path   nvarchar(1000) 分类路径
Column_Depth  int分类深度(默认值0)
Column_Order  int排序(默认值0)
Column_Intro  nvarchar(1000)分类说明

=============================================================
存储过程一:新建分类

CREATE PROCEDURE sp_Column_Insert
(
@Parent_ID int,
@Column_Name nvarchar(50),
@Column_Intro nvarchar(1000)
)
AS
Declare @Err As int
Set @Err=0

Begin Tran
--通过现有记录获取栏目ID
Declare @Column_ID As int
Declare @Column_Depth As int
Select @Column_ID = Max(Column_ID) From Tb_Column
IF @Column_ID Is Not Null
Set @Column_ID = @Column_ID+1
Else
Set @Column_ID = 1

--判断是否是顶级栏目,设置其Column_Path和Column_Order
Declare @Column_Path As nvarchar(1000)
Declare @Column_Order As int
IF @Parent_ID = 0
Begin
Set @Column_Path =Ltrim(Str(@Column_ID))
Select @Column_Order = Max(Column_Order) From Tb_Column
IF @Column_Order Is Not Null
Set @Column_Order = @Column_Order + 1
Else --如果没有查询到记录,说明这是第一条记录
Set @Column_Order = 1

--深度
Set @Column_Depth = 1
End
Else
Begin
--获取父节点的路径和深度
Select @Column_Path = Column_Path ,@Column_Depth = Column_Depth From Tb_Column Where

Column_ID=@Parent_ID
IF @Column_Path Is Null
Begin
Set @Err = 1
Goto theEnd
End

--获取同父节点下的最大序号
Select @Column_Order = Max(Column_Order) From Tb_PicColumn Where Column_Path like

''+@Column_Path+'%'  Or Column_ID = @Parent_ID
IF @Column_Order Is Not Null --如果序号存在,那么将该序号后的所有序号都加1
Begin
--更新当前要插入节点后所有节点的序号
Update Tb_Column Set Column_Order = Column_Order +1 Where Column_Order

>@Column_Order
--同父节点下的最大序号加上1,构成自己的序号
Set @Column_Order = @Column_Order + 1
End
Else
Begin
Set @Err=1
Goto theEnd
End

--父节点的路径加上自己的ID号,构成自己的路径
Set @Column_Path = @Column_Path + '' + Ltrim(Str(@Column_ID))

--深度

[1] [2] [3] [4] [5] [6] 下一页 




上一篇:在ASP.NET Atlas中调用Web Service—处理错误 超时以及响应用户的取消操作

下一篇:借助工具 为BitComet轻松去广告

无限级分类的非递归实现(存储过程版) 相关文章:
·红色警戒2 无限军队秘籍
·在PB中如何实现数据模糊查询
·无线攻防:破解WEP密钥过程全解
·一次入侵过程的公开分析
·Ajax实现分页查询
·PB动态报表格式自由定义的实现
·延伸无限!超高清晰道路写真壁纸欣赏
·PB程序中在普通激光打印机上实现条码打印
·红警2:尤里的复仇无限尤里改
·《性福人生》无限金钱秘籍 - 游戏秘籍
无限级分类的非递归实现(存储过程版) 相关软件:
·拳皇无限版
·BIOS设置全过程视频精讲(配语音讲解)WMV格式
·拳皇 无限版
·变化无常,表情无限
·TCP-IP详解卷2:实现
·电脑装机全过程
· 创意无限-15套星座造型图
·三角洲特种部队之黑鹰坠落 1.1.0.10升级档无限弹药修改器
·IMail Server v7.13 无限制破解版
·Aerial Antics(实现你的飞翔梦) V1.0

特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
[打印本页] [关闭窗口] 转载请注明来源:http://www.vipcn.com
| 帮助(?) | 版权声明 | 友情连接 | 关于我们 | 信息发布
Copyright 2007 www.vipcn.com All Rights Reserved. 鄂ICP备05000083号Powered by:vipcn