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

已知这个存储过程可以把文件名和路径读出

exec master..xp_dirtree @path='D:/目录',@depth=0,@file=1--参数:目录名,目录深度,是否显示文件

现在想得到'D:/笨狼代码收藏集'目录下的全部深度的文件路径[含子目录],如下表:

id[编号]              dir [全部文件全路径]

1D:/笨狼代码收藏集/根目录下文件1.txt
2D:/笨狼代码收藏集/算法/算法目录下文件1.txt
3D:/笨狼代码收藏集/算法/算法目录下文件2.txt
4D:/笨狼代码收藏集/其他/其他目录下文件1.txt
5D:/笨狼代码收藏集/其他/xml/xml目录下文件1.txt
。。。。。


可以用递归和非递归,方法不限。 

 

邹老大解:

DECLARE @Path nvarchar(260)
SET @Path = 'f:/'

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,
IsFile bit)
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 #

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值