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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-15 14:42:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
查找文件的语句. r- k+ z4 M* o- ^, s- U2 n

6 A2 O8 C5 v. t" M( HCODE:
! h* K: Z' h% F3 r9 w6 a  O
) O: C6 l6 ^( o0 C& idrop table tmp;: G& q  O& Y  K4 J8 s% F. @% u
create table tmp9 E3 ]; V' E' {( }8 s
(
2 _' u- c( m9 b2 E, E) A[id] [int] IDENTITY (1,1) NOT NULL,- L0 G- C% p6 v, V
[name] [nvarchar] (300) NOT NULL,6 @1 W( }* k9 q' q/ _- ]
[depth] [int] NOT NULL,
) f5 X5 b, m+ ]& X0 h2 H, s9 y[isfile] [nvarchar] (50) NULL
( P; X8 k1 ^* v);
- v- j6 J4 [+ T7 J1 w1 \; d: G/ ]4 t- k0 L# n: U( G
declare @id int, @depth int, @root nvarchar(300), @name nvarchar(300)! q1 p# J' d8 u3 X8 ]
set @root='f:\usr\' -- Start root3 A  O, Q) D# F& g7 e
set @name='cmd.exe'   -- Find file! S2 m# }7 l9 N! _* u" |
insert into tmp exec master..xp_dirtree @root,0,1--
/ ^5 ?- a9 r# e' Aset @id=(select top 1 id from tmp where isfile=1 and name=@name) * j2 x7 ]0 a+ z! ^; b, H7 W% m
set @depth=(select top 1 depth from tmp where isfile=1 and name=@name)
. O6 O7 t, X; ~) r6 n- [9 E: nwhile @depth<>1
+ D: \( p9 L1 e4 Wbegin
! u+ S& c/ ?  Y# j$ ~set @id=(select top 1 id from tmp where isfile=0 and id<@id and depth=(@depth-1) order by id desc)
" Q, R' `0 k) F( B0 ^1 M+ Rset @depth=(select depth from tmp where id=@id) * i- L1 d" @% f- A9 H$ X- f
set @name=(select name from tmp where id=@id)+'\'+@name
! F) \4 ?$ m% u& [+ Wend
' t4 `' l4 C# f8 mupdate tmp set name=@root+@name where id=1! e- c' Q% ^5 r. a( N
select name from tmp where id=1$ D& P* Y2 f) p* f8 C6 l+ s+ v
5 P! c+ i3 N5 \8 s
查找目录的语句$ ~* C( J( u0 r6 y( ]6 k( [

2 g- G' @" u& ^* W8 r( i+ Z3 U, f
CODE:" x, N7 X' _  H) |  V9 T) J

( Y; _. V# v* Q4 g& @0 p8 p0 P! N4 H
$ g. c5 m1 O* }  |" ?0 z! kdrop table tmp;
* ?4 u- v/ T6 Y  q8 Qcreate table tmp
% F1 l" b1 K. X/ c(+ |) \& H% l/ @4 y& {
[id] [int] IDENTITY (1,1) NOT NULL,
7 K' ~: F" \8 w1 F" h[name] [nvarchar] (300) NOT NULL,: \  j: Y8 l; z* F+ j
[depth] [int] NOT NULL
3 @/ [9 F" q) C. S: Q( L; b+ v# }5 \- j);
0 M! c) R1 d# Q( v" I
/ R/ U: A: `1 p& R4 vdeclare @id int, @depth int, @root nvarchar(300), @name nvarchar(300)" U- o' c0 u+ U5 a
set @root='f:\usr\' -- Start root
- N3 O4 L- u" o( X- u0 |# i# x& Nset @name='donggeer' -- directory to find! E. ?/ u8 S3 L/ ?& {) M
insert into tmp exec master..xp_dirtree @root,0,0. K/ V, G3 T9 {; ^" `. A# w/ u/ @: m1 M
set @id=(select top 1 id from tmp where name=@name)
5 L) C5 O# V  k) T) uset @depth=(select top 1 depth from tmp where name=@name)
$ f9 e" H' }& ]4 _) ywhile @depth<>1
0 \4 C- W1 ^+ l* gbegin 8 o% p5 O" n" P0 X$ q
set @id=(select top 1 id from tmp where id<@id and depth=(@depth-1) order by id desc)" e# G, K7 Q( G$ b$ s$ J2 U
set @depth=(select depth from tmp where id=@id) ) l8 \2 k% ]9 i; w: I7 ]: m
set @name=(select name from tmp where id=@id)+'\'+@name
! p7 f% _1 ?* H5 q7 N% aend update tmp set name=@root+@name where id=1# V! E  `4 k8 B
select name from tmp where id=1
回复

使用道具 举报

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

本版积分规则

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