zoukankan      html  css  js  c++  java
  • 无限级分类(非递归算法/存储过程版/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

    作者:菩提树下的杨过
    出处:http://yjmyzz.cnblogs.com
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    easyui控件写法造成的错误
    外部访问服务器数据库被防火墙屏蔽报错
    云服务器Windows Server2012 配置http服务器(又称Web服务器,IIS)
    mysql五:索引原理与慢查询优化
    mysql四:数据操作
    mysql四-2:多表查询
    sql查询作业答案
    mysql四-1:单表查询
    mysql五补充部分:SQL逻辑查询语句执行顺序
    第三篇:表操作
  • 原文地址:https://www.cnblogs.com/yjmyzz/p/975448.html
Copyright © 2011-2022 走看看