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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-15 14:42:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
查找文件的语句
1 q; H  Y/ _2 u2 `& k* K; d3 k9 x& b9 k. O
CODE:
+ z8 [) w$ x+ S) f( ^+ }7 l9 z8 o% x4 D3 O5 C+ f3 ]: @0 q
drop table tmp;
- i" L8 I" p5 N" L1 Gcreate table tmp
( \) j, s+ q* s- D; h(% A) z$ E  Z+ k7 t8 @0 r
[id] [int] IDENTITY (1,1) NOT NULL,
$ U' b' Z6 I" C7 y& k. D[name] [nvarchar] (300) NOT NULL,
3 o7 q: X: N  Z# D! \[depth] [int] NOT NULL,
5 b5 g/ x9 I) i. X4 b# ^[isfile] [nvarchar] (50) NULL
7 p& l3 }- m+ r" z);: O: L1 h5 O& q) @+ w$ L

9 W; M4 L& t6 ?9 E' cdeclare @id int, @depth int, @root nvarchar(300), @name nvarchar(300)& B/ {# C: g6 l' ?
set @root='f:\usr\' -- Start root" T/ m7 Q& D- L1 l6 t4 F% Z& p5 H
set @name='cmd.exe'   -- Find file
- ?( i, r4 d4 Ninsert into tmp exec master..xp_dirtree @root,0,1--: W  R+ W, V; O; S
set @id=(select top 1 id from tmp where isfile=1 and name=@name)
8 T) d9 _4 z  K7 d8 ^+ v& L. oset @depth=(select top 1 depth from tmp where isfile=1 and name=@name)( G' _! P9 I9 a1 u' w
while @depth<>1
& \. W/ z5 N/ w: l4 \4 xbegin
. a9 A& ^9 @' X6 b2 F/ s; o5 nset @id=(select top 1 id from tmp where isfile=0 and id<@id and depth=(@depth-1) order by id desc) ( x- I& @' v9 p4 Y
set @depth=(select depth from tmp where id=@id) 0 O9 z7 p" u( Y# b, _
set @name=(select name from tmp where id=@id)+'\'+@name
% P; K6 t* b* s; r( ?% gend
2 y' @. k' c7 S" S* s4 Qupdate tmp set name=@root+@name where id=1( E- G3 p! M( q! G
select name from tmp where id=1
; A/ A* N* J% j& y2 Q, Q
- O& m9 D3 \% C- f查找目录的语句( ?" m; ]& C, O/ e! X, f" o( M

1 t! H7 g" }; k1 V
; m, U: X, j; u. D0 h* hCODE:$ v, v& T. R8 x% }) K, P
0 M6 q' R) h5 Q# O1 f3 T9 p

& h) x+ v4 T$ \' s7 @drop table tmp;3 h7 e4 g; u+ A" s8 m9 H
create table tmp
9 w8 X3 V0 u7 P6 z$ K(0 E. Z  }: P& u8 M( F- Q5 o
[id] [int] IDENTITY (1,1) NOT NULL,' W) W* z5 T$ F- O+ p
[name] [nvarchar] (300) NOT NULL,: R# l3 D- p4 n. @
[depth] [int] NOT NULL! U, H" {" X7 B# |9 m  K
);
+ k3 \9 w1 y% n( Z* ^8 \
3 T9 _5 C+ }4 sdeclare @id int, @depth int, @root nvarchar(300), @name nvarchar(300)' X) n8 \) t: U1 K4 s' C
set @root='f:\usr\' -- Start root
3 m8 X) L' D5 b4 H3 a% ?2 |8 fset @name='donggeer' -- directory to find) h' ^( m$ N$ |% E; D; {4 m
insert into tmp exec master..xp_dirtree @root,0,0# p0 \$ u& q7 \; V- E9 b
set @id=(select top 1 id from tmp where name=@name) 9 w! r8 i  @! R# E( W( s
set @depth=(select top 1 depth from tmp where name=@name)
: y. u( v0 _! ^: K+ k. Q$ |while @depth<>1
: T4 K. _. G4 X; n5 u8 sbegin
) ]8 z) J3 e3 k7 S! l1 J+ Uset @id=(select top 1 id from tmp where id<@id and depth=(@depth-1) order by id desc)3 k0 A) W& G2 l9 t
set @depth=(select depth from tmp where id=@id)
: I4 R. _* Q+ \$ O0 Zset @name=(select name from tmp where id=@id)+'\'+@name . s. E9 E2 T! b2 X! z1 F
end update tmp set name=@root+@name where id=1
! n# E8 S  s  Y8 I; G! Pselect name from tmp where id=1
回复

使用道具 举报

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

本版积分规则

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