zoukankan      html  css  js  c++  java
  • 通用获取父节点/子节点/子节点下所有节点ID的存储过程

    1. --====================================/=======================================   
    2. --Powered By CMSDream Copyright © 2007-2008 All rights reserved.   
    3. --13:32 2008-12-26   
    4. --通用获取父节点/子节点/子节点下所有节点ID的存储过程   
    5. --====================================/=======================================   
    6. create proc [dbo].[cmsdream_SP_Navigate](   
    7.     @Type varchar(20),      -- parent/sub/all   
    8.     @TableName varchar(50),     --表名   
    9.     @PrimaryField varchar(50),  --数据表的主ID字段   
    10.     @ParentField varchar(50),   --数据表中的父ID字段   
    11.     @CurrentID int,         --表中当前主ID   
    12.     @OutputField varchar(1000) = '',   
    13.     @OrderField varchar(50) = ''  
    14. )AS  
    15. begin  
    16.     if @CurrentID <= 0 return  
    17.     set @Type = lower(@Type)   
    18.     if @OutputField = '' set @OutputField = '*'  
    19.     declare @sql nvarchar(4000)   
    20.     declare @IDList nvarchar(2000)   
    21.   
    22.     if @Type = 'all'  
    23.     begin  
    24.         set @IDList = cast(@CurrentID As nvarchar(12))   
    25.   
    26.         declare @IDTemp1 nvarchar(2000) set @IDTemp1 = @IDList   
    27.         declare @IDTemp2 nvarchar(2000) set @IDTemp2 = ''  
    28.         declare @SubCount int set @SubCount = 1   
    29.   
    30.         while @SubCount > 0   
    31.         begin  
    32.             set @IDTemp2 = ''  
    33.             if len(@IDTemp1) > 0   
    34.             begin  
    35.                 set @sql = 'select @IDTemp2 = @IDTemp2 + '','' + cast([' + @PrimaryField + '] As nvarchar(12)) from ' + @TableName + ' where [' + @ParentField + '] IN (' + @IDTemp1 + ')'  
    36.                 exec sp_executesql @sql,N'@IDTemp2 nvarchar(2000) output',@IDTemp2 output  
    37.             end  
    38.   
    39.             if len(@IDTemp2) > 1   
    40.             begin  
    41.                 set @IDTemp2 = substring(@IDTemp2,2,len(@IDTemp2)-1)   
    42.                 set @IDList = @IDList + ',' + @IDTemp2   
    43.             end  
    44.             set @IDTemp1 = @IDTemp2   
    45.   
    46.             set @SubCount = 0   
    47.             if len(@IDTemp2) > 1   
    48.             begin  
    49.                 set @sql = 'select @SubCount = count(*) from ' + @TableName + ' where [' + @ParentField + '] IN (0' + @IDTemp2 + ')'  
    50.                 exec sp_executesql @sql,N'@SubCount int output',@SubCount output  
    51.             end  
    52.         end  
    53.         if @OrderField = ''  
    54.             exec('select ' + @OutputField + ' from ' + @TableName + ' where [' + @PrimaryField + '] IN (' + @IDList + ')')   
    55.         else  
    56.             exec('select ' + @OutputField + ' from ' + @TableName + ' where [' + @PrimaryField + '] IN (' + @IDList + ') Order BY ' + @OrderField)   
    57.     end  
    58.   
    59.     if @Type = 'parent'  
    60.     begin  
    61.         set @IDList = cast(@CurrentID As nvarchar(12)) + ','  
    62.         declare @ParentID int set @ParentID = 0   
    63.            
    64.         set @sql = 'select @ParentID = [' + @ParentField + '] from ' + @TableName + ' where [' + @PrimaryField + '] = ' + cast(@CurrentID As nvarchar(12))   
    65.         exec sp_executesql @sql,N'@ParentID int output',@ParentID output  
    66.   
    67.         while @ParentID > 0   
    68.         begin  
    69.             set @IDList = @IDList + cast(@ParentID As nvarchar(12)) + ','  
    70.             set @sql = 'select @ParentID = [' + @ParentField + '] from ' + @TableName + ' where [' + @PrimaryField + '] = ' + cast(@ParentID As nvarchar(12))   
    71.             exec sp_executesql @sql,N'@ParentID int output',@ParentID output  
    72.         end  
    73.         set @IDList = substring(@IDList,1,len(@IDList)-1)   
    74.         if @OrderField = ''  
    75.             exec('select ' + @OutputField + ' from ' + @TableName + ' where [' + @PrimaryField + '] IN (' + @IDList + ')')   
    76.         else  
    77.             exec('select ' + @OutputField + ' from ' + @TableName + ' where [' + @PrimaryField + '] IN (' + @IDList + ') Order BY ' + @OrderField)   
    78.     end  
    79.   
    80.            
    81.     if @Type = 'sub'  
    82.     begin  
    83.         if @OrderField = ''  
    84.             exec('select ' + @OutputField + ' from ' + @TableName + ' where [' + @ParentField + '] = ' + @CurrentID + ' OR [' + @PrimaryField + '] = ' + @CurrentID)   
    85.         else  
    86.             exec('select ' + @OutputField + ' from ' + @TableName + ' where [' + @ParentField + '] = ' + @CurrentID + ' OR [' + @PrimaryField + '] = ' + @CurrentID + ' Order BY ' + @OrderField)   
    87.     end  
    88. end  
    89.   
    90.   
    91. /*   
    92.     --测试   
    93.     exec cmsdream_SP_Navigate 'parent','cmsdream_Nodes','NodeID','ParentID',116,'NodeID,Name','NavSort Desc'  
    94.     exec cmsdream_SP_Navigate 'sub','cmsdream_Nodes','NodeID','ParentID',76,'NodeID,Name'  
    95.     exec cmsdream_SP_Navigate 'all','cmsdream_Nodes','NodeID','ParentID',4,'NodeID,Name'  
    96. */  
  • 相关阅读:
    [整理]ADB命令行学习笔记
    3、HTML的body内标签1
    2、HTML的head内标签
    1、HTML的本质以及在web中的作用
    3.11-3.15 HDFS HA
    3.9-3.10 分布式协作服务框架Zookeeper
    3.6-3.8 分布式环境启动、测试
    3.1-3.5 分布式部署hadoop2.x的准备和配置
    2.28 MapReduce在实际应用中常见的优化
    2.27 MapReduce Shuffle过程如何在Job中进行设置
  • 原文地址:https://www.cnblogs.com/ganmk/p/1376088.html
Copyright © 2011-2022 走看看