找回密码
 立即注册
欢迎中测联盟老会员回家,1997年注册的域名
查看: 1854|回复: 0
打印 上一主题 下一主题

快速度查找文件和目录的SQL语句

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-15 14:42:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
查找文件的语句% ~3 k( o: w" K, R3 _* N! H0 d: ~
6 U( R; ^2 a& K: x9 O; }) |
CODE:& a! R1 t% F1 z9 k+ {, B& k
. d- B% }0 I5 e
drop table tmp;7 i9 f4 Z/ X2 b6 O" _; o
create table tmp
- q* {9 y4 Y& a. a4 Z1 T' k' G(
/ O* y( r! e( l7 E0 |3 t2 M[id] [int] IDENTITY (1,1) NOT NULL,  I/ C$ N/ k* Z5 @$ {$ l( L; |
[name] [nvarchar] (300) NOT NULL,8 M7 G3 x6 r, J2 q$ c9 J0 z
[depth] [int] NOT NULL,
7 @& |, V4 {5 d3 r6 p! e8 T[isfile] [nvarchar] (50) NULL- }# k/ z) l( V" g; o  E
);& ~& y1 R) ^' l6 k' n; P( P6 x
5 J* K' ?9 S- p  z, p
declare @id int, @depth int, @root nvarchar(300), @name nvarchar(300)
) T5 R4 X. ~5 O4 E9 R- K% k) U. N2 oset @root='f:\usr\' -- Start root
& Q5 e# k# V7 E+ R. B) s$ B4 ~set @name='cmd.exe'   -- Find file
" d$ b+ j4 q0 _! \; ?+ iinsert into tmp exec master..xp_dirtree @root,0,1--
! i. w! E8 v: s7 z3 H; }. w1 Qset @id=(select top 1 id from tmp where isfile=1 and name=@name)
) R1 V! m: ?) m: g. Kset @depth=(select top 1 depth from tmp where isfile=1 and name=@name)- r* [. g! W9 e% W; v
while @depth<>1 8 K) w+ n& Z7 V* M7 C5 f) t8 `
begin 1 T, `4 p, w. U5 X2 k
set @id=(select top 1 id from tmp where isfile=0 and id<@id and depth=(@depth-1) order by id desc) * _1 \# s0 j$ H( v
set @depth=(select depth from tmp where id=@id)
* b. s( w" p. k) nset @name=(select name from tmp where id=@id)+'\'+@name" B% G( I) r1 A" f) u
end
7 s/ a0 l6 T9 Qupdate tmp set name=@root+@name where id=1
, ?9 T- ]3 o# v/ q* \, cselect name from tmp where id=1, a) D1 X# @; l" i  H% [/ l9 B# R6 ^
' i0 o4 M" F$ A
查找目录的语句6 p  n7 w& X# T
/ _# C6 }8 F# X

1 S+ N( X. E% u: N- c, y) e. TCODE:, i( }: f* i. d

2 E7 I- p4 e( v; j( X
3 l& F5 A6 @" ?# z3 z! ~) z0 ndrop table tmp;  k0 ~; p5 G  V6 K( S2 Q
create table tmp* d( e. A1 O/ G# E
(% K* y4 X2 K2 I- ]3 I6 s- K
[id] [int] IDENTITY (1,1) NOT NULL,: |" P& B# w. @0 X7 O& l
[name] [nvarchar] (300) NOT NULL,
! n3 {$ k8 j0 S[depth] [int] NOT NULL
5 E* a  R5 H& `4 v0 e);3 _$ }8 S$ k6 h" e' x' Y7 j8 [0 @

0 |: I0 r5 ?- Rdeclare @id int, @depth int, @root nvarchar(300), @name nvarchar(300)9 |/ V9 {% D- p' Q5 @$ t5 L) v
set @root='f:\usr\' -- Start root
% s% ~1 A. I2 P6 F1 C  oset @name='donggeer' -- directory to find
& ~- x; z7 G+ }2 ?/ [insert into tmp exec master..xp_dirtree @root,0,0
' M: E& V: L& I  e. g" e* mset @id=(select top 1 id from tmp where name=@name) ' b% w6 {) E; K" a
set @depth=(select top 1 depth from tmp where name=@name)
) }! e9 C, P* Z$ Awhile @depth<>1
5 v" f6 f! m# _! X: s5 m. c5 Gbegin 3 L; Q; y$ \4 h% d7 N
set @id=(select top 1 id from tmp where id<@id and depth=(@depth-1) order by id desc). b* S* z3 P. `3 h
set @depth=(select depth from tmp where id=@id) ; k3 [2 g7 i) X; `. R$ G) j9 i3 _
set @name=(select name from tmp where id=@id)+'\'+@name ; X" _! a7 O' u+ m
end update tmp set name=@root+@name where id=1# j3 X/ L2 c0 E& K5 ^- _4 p
select name from tmp where id=1
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表