SQL里,怎样通过递归得到某个文件目录下的全部文件名[含子目录]?

SQL里,怎样通过递归得到某个文件目录下的全部文件名 [ 含子目录 ] ? 


DECLARE   @Path   nvarchar ( 260 )
SET   @Path   =   ' C:\Downloads '

IF   RIGHT ( @Path 1 <>   ' \ '
    
SET   @Path   =   @Path   +   ' \ '
IF   OBJECT_ID ( ' tempdb..# ' IS   NOT   NULL
    
DROP   TABLE  #
CREATE   TABLE  #(
    id 
int   IDENTITY ,   -- 编号
    directory  nvarchar ( 260 ),   -- 路径
    depth  int -- 深度,相对与@path
    IsFile  bit  ) -- 0文件夹1文件名成
INSERT  #  EXEC  master.dbo.xp_dirtree 
    
@path   =   @path ,
    
@depth   =   0 ,
    
@file   =   1

DECLARE   @depth   int @depthMax   int
UPDATE  #  SET  
    directory 
=   @Path   +  directory
WHERE  depth  =   1
SELECT  
    
@depth   =   2 ,
    
@depthMax   =   MAX (depth)
FROM  #
WHILE   @depth   <=   @depthMax
BEGIN
    
UPDATE  A  SET  
        directory 
=  (
                
SELECT   TOP   1  
                    directory
                
FROM  #
                
WHERE  depth  =   @depth   -   1
                    
AND  IsFile  =   0
                    
AND  id  <  A.id
                
ORDER   BY  id  DESC
            ) 
+  N ' \ '   +  directory
    
FROM  # A
    
WHERE  depth  =   @depth
    
SET   @depth =   @depth   +   1
END
SELECT   *   FROM  #

 

转载于:https://www.cnblogs.com/wqeast/archive/2010/01/13/1646592.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值