SQL Server 递归查询

 

 

这是我在项目中用到的一个存储过程,用来通过当前节点ID递归查找其所有的子节点。需要申明的是本存储过程仅支持SQL Server 2005

-- 建表
GO
/* ***** 对象:  Table [dbo].[sys_Group]    脚本日期: 01/17/2008 16:29:33 ***** */
SET  ANSI_NULLS  ON
GO
SET  QUOTED_IDENTIFIER  ON
GO
CREATE   TABLE   [ dbo ] . [ sys_Group ] (
    
[ GroupID ]   [ int ]   IDENTITY ( 1 , 1 NOT   NULL ,
    
[ G_CName ]   [ nvarchar ] ( 50 ) COLLATE Chinese_PRC_CI_AS  NULL ,
    
[ G_ParentID ]   [ int ]   NOT   NULL   DEFAULT  (( 0 )),
    
[ G_ShowOrder ]   [ int ]   NOT   NULL   DEFAULT  (( 0 )),
    
[ G_Level ]   [ int ]   NULL ,
    
[ G_ChildCount ]   [ int ]   NULL ,
    
[ G_Delete ]   [ tinyint ]   NULL ,
 
CONSTRAINT   [ PK_SYS_GROUP ]   PRIMARY   KEY   CLUSTERED  
(
    
[ GroupID ]   ASC
)
WITH  (IGNORE_DUP_KEY  =   OFF ON   [ PRIMARY ]
ON   [ PRIMARY ]

GO
EXEC  sys.sp_addextendedproperty  @name = N ' MS_Description ' @value = N ' 分类ID号 '  , @level0type = N ' SCHEMA ' @level0name = N ' dbo ' @level1type = N ' TABLE ' @level1name = N ' sys_Group ' @level2type = N ' COLUMN ' @level2name = N ' GroupID '

GO
EXEC  sys.sp_addextendedproperty  @name = N ' MS_Description ' @value = N ' 分类中文说明 '  , @level0type = N ' SCHEMA ' @level0name = N ' dbo ' @level1type = N ' TABLE ' @level1name = N ' sys_Group ' @level2type = N ' COLUMN ' @level2name = N ' G_CName '

GO
EXEC  sys.sp_addextendedproperty  @name = N ' MS_Description ' @value = N ' 上级分类ID0:为最高级 '  , @level0type = N ' SCHEMA ' @level0name = N ' dbo ' @level1type = N ' TABLE ' @level1name = N ' sys_Group ' @level2type = N ' COLUMN ' @level2name = N ' G_ParentID '

GO
EXEC  sys.sp_addextendedproperty  @name = N ' MS_Description ' @value = N ' 显示顺序 '  , @level0type = N ' SCHEMA ' @level0name = N ' dbo ' @level1type = N ' TABLE ' @level1name = N ' sys_Group ' @level2type = N ' COLUMN ' @level2name = N ' G_ShowOrder '

GO
EXEC  sys.sp_addextendedproperty  @name = N ' MS_Description ' @value = N ' 当前分类所在层数 '  , @level0type = N ' SCHEMA ' @level0name = N ' dbo ' @level1type = N ' TABLE ' @level1name = N ' sys_Group ' @level2type = N ' COLUMN ' @level2name = N ' G_Level '

GO
EXEC  sys.sp_addextendedproperty  @name = N ' MS_Description ' @value = N ' 当前分类子分类数 '  , @level0type = N ' SCHEMA ' @level0name = N ' dbo ' @level1type = N ' TABLE ' @level1name = N ' sys_Group ' @level2type = N ' COLUMN ' @level2name = N ' G_ChildCount '

GO
EXEC  sys.sp_addextendedproperty  @name = N ' MS_Description ' @value = N ' 是否删除1:是0:否 '  , @level0type = N ' SCHEMA ' @level0name = N ' dbo ' @level1type = N ' TABLE ' @level1name = N ' sys_Group ' @level2type = N ' COLUMN ' @level2name = N ' G_Delete '

 

-- 根据父节点ID查找所有子节点
CREATE   PROC  p_GetChildID  @ParentID   int
as
    
declare   @T   table (ID  int )
    
insert   @T   select  GroupID  from  sys_Group  where  G_ParentID  =   @ParentID
    
while   @@rowcount   >   0
        
insert   @T   select  A.GroupID  from  sys_Group  as  A  inner   join   @T   as  B
        
on  A.G_ParentID  =  B.ID  and  A.GroupID  not   in ( select  ID  from   @T )
    
select   *   from   @T
GO

-- 测试
declare   @ParentID   int
set   @ParentID   =   3
EXEC  p_GetChildID  @ParentID

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值