无限级分类(非递归算法/存储过程版/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
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 全套 | 人脸检测 & 人脸关键点检测 & 人脸卡通化
- 使用Jenkins Dashboard插件可视化部署
- 全面综述:图像特征提取与匹配技术
- opencv+python制作硬核七夕礼物
- opencv+python制作硬核七夕礼物
- 七夕节也要学起来,哈希哈希哈希!
- 目标检测器性能评估工具包
- istio 1.7发布
- AkShare-中国宏观-工业品出厂价格指数
- AkShare-中国宏观-采购经理人指数
- Python 为什么没有 void 关键字?
- 【特征提取+分类模型】4种常见的NLP实践思路
- 霸气!开源项目名字就叫BAT,具有语法高亮的Cat类命令
- 【Python基础系列】常见的数据预处理方法(附代码)
- 机器学习基础:类别不平衡问题处理方法汇总及实际案例解析