无限级分类(非递归算法/存储过程版/GUID主键)完整数据库示例_(2)插入记录

-- ======================================== -- Author:  <杨俊明,jimmy.yang@cntvs.com> -- Description: <无限级分类插入记录> -- Return     : 成功返回0,重名返回1 -- ======================================== Create PROCEDURE [dbo].[up_Class_InsertEx]  @newId uniqueidentifier, --新记录Id   @classType nvarchar(50), --类型(比如:产品,新闻,地区)  @parentId uniqueidentifier, --父类Id  @className nvarchar(50), --分类名称  @classReadMe nvarchar(200) --分类说明  AS BEGIN   SET NOCOUNT ON;   Declare @RootID int;     --根ID(顶级分类的RootID)  DeClare @ParentName nvarchar(500);  --父类名称  Declare @Depth int;      --父类深度  Declare @MaxOrders int;     --同级最大排序号  Declare @ParentIdStr nvarchar(500);  --父类Id全路径  Declare @ParentNameStr nvarchar(500); --父类名称全路径   --如果是顶级类  if @parentId='00000000-0000-0000-0000-000000000000'  begin   if not exists(select F_id From T_Class where F_ClassName=@className and F_type=@ClassType and F_parentid='00000000-0000-0000-0000-000000000000')     begin    set @RootID = 0       if exists(select F_id From T_Class Where F_type=@ClassType and F_parentid='00000000-0000-0000-0000-000000000000')    begin     select @RootId = max(F_RootID) From T_Class Where F_type=@ClassType and F_parentid='00000000-0000-0000-0000-000000000000';--得到当前顶级分类的最大RootId        end     insert into T_Class(     F_Id,     F_Type,     F_parentId,     F_className,     F_ReadMe,     F_parentIdstr,     F_parentNameStr,     F_RootId,     F_orders)    values(     @newId,     @classType,     '00000000-0000-0000-0000-000000000000',     @className,     @classReadMe,     '00000000-0000-0000-0000-000000000000',     '00000000-0000-0000-0000-000000000000',     @rootId+1,     0)    return 0;--顶级分类成功插入   end   else    return 1;--顶级分类已经存在  end

 --如果不是顶级类  if @parentId<>'00000000-0000-0000-0000-000000000000'     begin   --检查父类ID的合法性   if exists(select F_id From T_Class Where F_id=@parentID)     begin    --检查该节点是否已经存在      if not exists(select F_id From T_Class where F_ClassName=@className and F_type=@ClassType and F_parentid=@parentId)       begin           select @rootId=F_RootId,@ParentName=F_ClassName,@Depth=F_Depth,@parentIdStr=F_parentIdStr,@parentNameStr=F_parentNameStr From T_Class Where F_Id = @ParentId;         set @maxOrders = 0     --如果父类无子类     if not exists(select F_id From T_Class where F_ParentIdStr like '%' + Convert(Nvarchar(50),@parentId) + '%')           select @maxOrders = F_orders From T_Class where F_id=@parentId     else      select @maxOrders = Max(F_orders) From T_Class where F_ParentIdStr like '%' + Convert(Nvarchar(50),@parentId) + '%'           

    insert into T_Class(      F_ID,      F_Type,      F_parentId,      F_className,      F_ReadMe,      F_parentIdstr,      F_parentNameStr,      F_Orders,      F_Depth,      F_RootId        )     values(      @newId,      @classType,      @parentId,      @className,      @classReadMe,      @parentIdStr + ',' + convert(nvarchar(50),@parentID),      @parentNameStr + ',' + @parentName,      @maxOrders + 1,      @depth + 1,      @rootId      )     update T_class set F_orders = F_orders + 1 where (F_orders > @maxOrders) And (F_RootId=@RootId) And F_ID<>@NewId      return 0;      end    else     return 1;   end  end  END

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏编程

MapReduce编程模型

通过WordCount程序理解MapReduce编程模型 WordCount,名为单词统计,功能是统计文本文件中每个单词出现的次数。例如下图中,有两个文本(蓝色...

2158
来自专栏JetpropelledSnake

Django学习笔记之Django ORM Aggregation聚合详解

在当今根据需求而不断调整而成的应用程序中,通常不仅需要能依常规的字段,如字母顺序或创建日期,来对项目进行排序,还需要按其他某种动态数据对项目进行排序。Djngo...

1012
来自专栏五分钟学算法

LeeCode题目图解

There is an English version of README here. just click it!

1622
来自专栏恰童鞋骚年

数据结构基础温故-6.查找(上):基本查找与树表查找

只要你打开电脑,就会涉及到查找技术。如炒股软件中查股票信息、硬盘文件中找照片、在光盘中搜DVD,甚至玩游戏时在内存中查找攻击力、魅力值等数据修改用来作弊等,都要...

1333
来自专栏扎心了老铁

spark三种连接join

本文主要介绍spark join相关操作。 讲述spark连接相关的三个方法join,left-outer-join,right-outer-join,在这之前...

3678
来自专栏软件开发 -- 分享 互助 成长

CRC校验码

循环冗余校验码(CRC)的基本原理是:在K位信息码后再拼接R位的校验码,整个编码长度为N位,因此,这种编码也叫(N,K)码。对于一个给定的(N,K)码,可以证明...

2656
来自专栏函数式编程语言及工具

SDP(9):MongoDB-Scala - data access and modeling

    MongoDB是一种文件型数据库,对数据格式没有硬性要求,所以可以实现灵活多变的数据存储和读取。MongoDB又是一种分布式数据库,与传统关系数据库不同...

3904
来自专栏码匠的流水账

聊聊storm的WindowedBolt

storm-2.0.0/storm-client/src/jvm/org/apache/storm/topology/IWindowedBolt.java

2284
来自专栏PPV课数据科学社区

【学习】七天搞定SAS(二):基本操作(判断、运算、基本函数)

SAS生成新变量 SAS支持基本的加减乘除,值得一提的是它的**代表指数,而不是^。 * Modify homegarden data set with ass...

4624
来自专栏ml

位运算的方法,大结

Title:       位操作基础篇之位操作全面总结 Author:     MoreWindows E-mail:      morewindows@126...

6138

扫码关注云+社区

领取腾讯云代金券