【自用】无限级分类获取SQL语句

自定义函数:

 1 USE [ExpenseCenter_Fibrogen]
 2 GO
 3 /****** Object:  UserDefinedFunction [dbo].[GetSubordinateTable]    Script Date: 2014/10/11 13:24:32 ******/
 4 SET ANSI_NULLS ON
 5 GO
 6 SET QUOTED_IDENTIFIER ON
 7 GO
 8 ALTER FUNCTION [dbo].[GetSubordinateTable]
 9 (    
10     @adaccount        nvarchar(128),
11     @includeResign    bit,
12     @allowMore        bit
13 )
14 RETURNS @SubordinateTable TABLE 
15 (
16     ADAccount    nvarchar(128),
17     ChineseName    nvarchar(128),
18     EnglishName    nvarchar(128)
19 )
20 AS
21 Begin
22     
23     Insert Into @SubordinateTable
24         Select ADAccount,ChineseName,EnglishName
25             From SystemUser Where ReportingUserADAccount = @adaccount
26                 And (@includeResign = 1 Or IsActive=1)
27 
28     if @allowMore=1
29     Begin
30         declare @acc    nvarchar(128)
31         set @acc = ''
32         while 1=1
33         Begin
34             Select Top 1 @acc = ADAccount From SystemUser Where ReportingUserADAccount = @adaccount And (@includeResign = 1 Or IsActive=1)
35                 And ADAccount>@acc Order By ADAccount
36 
37             if @@ROWCOUNT=0
38                 break
39 
40             Insert Into @SubordinateTable
41                 Select * From GetSubordinateTable(@acc,@includeResign,@allowMore)
42         End
43     End
44 
45     RETURN
46 End

 

WITH函数(仅支持SQL SERVE 2008)

向上查找

1 WITH Users(ADAccount,ParentADAccount) 
2 as 
3 ( 
4     SELECT ADAccount,ReportingUserADAccount FROM SystemUser where ADAccount='fli'
5  UNION ALL
6  SELECT A.ADAccount,ReportingUserADAccount FROM SystemUser A,Users b    
7  where a.ADAccount = b.ParentADAccount 
8 )
9 select * from Users

 

向下查找

1 WITH Users(ADAccount,ParentADAccount) 
2 as 
3 ( 
4     SELECT ADAccount,ReportingUserADAccount FROM SystemUser where ADAccount='xwang'
5  UNION ALL
6  SELECT A.ADAccount,ReportingUserADAccount FROM SystemUser A,Users b    
7  where a.ReportingUserADAccount = b.ADAccount 
8 )
9 select * from Users

 

转载于:https://www.cnblogs.com/briny/p/4019110.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值