子节点下所有节点ID的存储过程

  • 格式:doc
  • 大小:49.50 KB
  • 文档页数:5

1--====================================/=============================== ========2--Powered By CMSDream Copyright © 2007-2008 All rights reserved.3--13:32 2008-12-264--通用获取父节点/子节点/子节点下所有节点ID的存储过程5--====================================/=============================== ========6create proc [dbo].[cmsdream_SP_Navigate](7 @Type varchar(20), -- parent/sub/all8 @TableName varchar(50), --表名9 @PrimaryField varchar(50), --数据表的主ID字段10 @ParentField varchar(50), --数据表中的父ID字段11 @CurrentID int, --表中当前主ID12 @OutputField varchar(1000) = '',13 @OrderField varchar(50) = ''14)AS15begin16 if @CurrentID <= 0 return17set @Type = lower(@Type)18 if @OutputField = '' set @OutputField = '*'19declare @sql nvarchar(4000)20declare @IDList nvarchar(2000)2122 if @Type = 'all'23begin24set @IDList = cast(@CurrentID As nvarchar(12))2526declare @IDTemp1 nvarchar(2000) set @IDTemp1 = @IDList27declare @IDTemp2 nvarchar(2000) set @IDTemp2 = ''28declare @SubCount int set @SubCount = 12930 while @SubCount > 031begin32set @IDTemp2 = ''33 if len(@IDTemp1) > 034begin35set @sql = 'select @IDTemp2 = @IDTemp2 + '','' + cast([' + @PrimaryField + '] As nvarchar(12)) from ' + @TableName + ' where [' +@ParentField + '] IN (' + @IDTemp1 + ')'36exec sp_executesql @sql,N'@IDTemp2 nvarchar(2000)output',@IDTemp2 output37end3839 if len(@IDTemp2) > 140begin41set @IDTemp2 = substring(@IDTemp2,2,len(@IDTemp2)-1)42set @IDList = @IDList + ',' + @IDTemp243end44set @IDTemp1 = @IDTemp24546set @SubCount = 047 if len(@IDTemp2) > 148begin49set @sql = 'select @SubCount = count(*) from ' + @TableName + ' where [' + @ParentField + '] IN (0' + @IDTemp2 + ')'50exec sp_executesql @sql,N'@SubCount int output',@SubCount output51end52end53 if @OrderField = ''54exec('select ' + @OutputField + ' from ' + @TableName + ' where [' + @PrimaryField + '] IN (' + @IDList + ')')55else56exec('select ' + @OutputField + ' from ' + @TableName + ' where [' + @PrimaryField + '] IN (' + @IDList + ') Order BY ' + @OrderField) 57end5859 if @Type = 'parent'60begin61set @IDList = cast(@CurrentID As nvarchar(12)) + ','62declare @ParentID int set @ParentID = 06364set @sql = 'select @ParentID = [' + @ParentField + '] from ' + @TableName + ' where [' + @PrimaryField + '] = ' + cast(@CurrentID As nvarchar(12))65exec sp_executesql @sql,N'@ParentID int output',@ParentID output 6667 while @ParentID > 068begin69set @IDList = @IDList + cast(@ParentID As nvarchar(12)) + ',' 70set @sql = 'select @ParentID = [' + @ParentField + '] from ' + @TableName + ' where [' + @PrimaryField + '] = ' + cast(@ParentID As nvarchar(12))71exec sp_executesql @sql,N'@ParentID int output',@ParentID output72end73set @IDList = substring(@IDList,1,len(@IDList)-1)74 if @OrderField = ''75exec('select ' + @OutputField + ' from ' + @TableName + ' where [' + @PrimaryField + '] IN (' + @IDList + ')')76else77exec('select ' + @OutputField + ' from ' + @TableName + ' where [' + @PrimaryField + '] IN (' + @IDList + ') Order BY ' + @OrderField)78end798081 if @Type = 'sub'82begin83 if @OrderField = ''84exec('select ' + @OutputField + ' from ' + @TableName + ' where[' + @ParentField + '] = ' + @CurrentID + ' OR [' + @PrimaryField + '] = ' + @CurrentID)85else86exec('select ' + @OutputField + ' from ' + @TableName + ' where [' + @ParentField + '] = ' + @CurrentID + ' OR [' + @PrimaryField + '] = ' + @CurrentID + ' Order BY ' + @OrderField)87end88end899091/*92 --测试93exec cmsdream_SP_Navigate'parent','cmsdream_Nodes','NodeID','ParentID',116,'NodeID,Name','NavSort Desc'94exec cmsdream_SP_Navigate'sub','cmsdream_Nodes','NodeID','ParentID',76,'NodeID,Name'95exec cmsdream_SP_Navigate'all','cmsdream_Nodes','NodeID','ParentID',4,'NodeID,Name'96*/。