无限级分类(非递归算法/存储过程版/GUID主键)完整数据库示例_(2)插入记录
来源:互联网 发布:日韩和欧美 知乎 编辑:程序博客网 时间:2024/06/05 14:17
-- ========================================
-- 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
- 无限级分类(非递归算法/存储过程版/GUID主键)完整数据库示例_(2)插入记录
- 无限级分类(非递归算法/存储过程版/GUID主键)完整数据库示例_(2)插入记录
- 无限级分类(非递归算法/存储过程版/GUID主键)完整数据库示例_(3)删除记录
- 无限级分类(非递归算法/存储过程版/GUID主键)完整数据库示例_(4)显示记录
- 无限级分类(非递归算法/存储过程版/GUID主键)完整数据库示例_(4)显示记录
- 无限级分类(非递归算法/存储过程版/GUID主键)完整数据库示例_(3)删除记录
- 无限级分类(非递归算法/存储过程版/GUID主键)完整数据库示例_(1)表结构
- 无限级分类(非递归算法/存储过程版/GUID主键)完整数据库示例_(1)表结构
- 无限级分类的非递归实现(存储过程版)
- 无限级分类的非递归实现(存储过程版)
- P.NET无限级分类的非递归实现(存储过程版
- ASP.NET无限级分类的非递归实现(存储过程版)
- ASP.NET无限级分类的非递归实现(存储过程版)
- ASP.NET无限级分类的非递归实现(存储过程版)
- (转)无限级分类的非递归实现(存储过程版)(细微修正)
- 无限级分类的非递归实现(存储过程版)
- 无限级分类的非递归实现(存储过程版)
- ASP.NET无限级分类的非递归实现(存储过程版)
- C# socket编程 异步服务端 同步客户端
- 关于页面执行效率的问题
- MSN不能登陆,错误代码80048820
- WOW按键
- 无限级分类(非递归算法/存储过程版/GUID主键)完整数据库示例_(1)表结构
- 无限级分类(非递归算法/存储过程版/GUID主键)完整数据库示例_(2)插入记录
- 无限级分类(非递归算法/存储过程版/GUID主键)完整数据库示例_(3)删除记录
- 无限级分类(非递归算法/存储过程版/GUID主键)完整数据库示例_(4)显示记录
- 新的限制Text文本只能输入数字的方法
- 魔兽世界: 向操作高手迈进
- 魔兽世界:操作的合理性:FS篇
- 白盒测试之基本路径测试法
- oracle sum count 的区别
- 病原菌(びょうげんきん) and the next aim