SQL递归

递归一般出现在树形结构中

1:根据孩子节点查找所有父节点

With T
As
(
Select * From U_Companies TB Where CompanyID=80047
Union All
Select TB.* From U_Companies TB Inner Join T on TB.CompanyID=T.ParentID
)
Select * From T

  

 

2:根据父亲查找所有子节点

 

With T
As
(
Select * From U_Companies TB Where CompanyID=80047
Union All
Select TB.* From U_Companies TB Inner Join T on TB.ParentID=T.CompanyID
)
Select * From T

 

如果CompanyID多个

declare @CompanyRange varchar(1000)=''
set @CompanyRange='80084,80085'

;With T
	As
	(
		SELECT TB.* FROM 
		(
			SELECT T1.* From 
				U_Companies T1 
				INNER JOIN 
				(SELECT F1 AS CompanyID  FROM dbo.SplitStrToTable(@CompanyRange,',')) T2
			ON T1.CompanyID=T2.CompanyID
		) TB
	Union All
	Select TB.*
	From U_Companies TB Inner Join T on TB.ParentID=T.CompanyID
	)
	Select * From T ORDER BY CompanyID;

  

SplitStrToTable函数代码:
ALTER   function   [dbo].[SplitStrToTable]
(
    @SourceSql   VARCHAR(8000),
    @StrSeprate   VARCHAR(100))
    RETURNS   @temp   TABLE(F1   VARCHAR(100)
)   
AS     
BEGIN   
  DECLARE   @ch  AS   VARCHAR(100)   
  SET   @SourceSql=@SourceSql+@StrSeprate     
  WHILE(@SourceSql<>'')   
  BEGIN   
		SET   @ch=left(@SourceSql,CHARINDEX(',',@SourceSql,1)-1)   
		INSERT   @temp   VALUES(@ch)   
		SET   @SourceSql=stuff(@SourceSql,1,charindex(',',@SourceSql,1),'')   
  END   
  RETURN   
END

  

 

 

 

posted on 2016-03-14 09:25 飘扬De黑夜 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/volts0302/p/5274577.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值