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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-15 14:42:56 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
查找文件的语句
& f8 H" a0 k, _/ ^3 f# B
) ]4 H# ~+ z; r- {4 eCODE:! z: {3 \5 W& I
+ D: A6 ~3 a$ A0 `. L# c
drop table tmp;
. J. w) k% X+ ]# fcreate table tmp
( b7 J% y- f) Q8 @(6 R. p0 p& o! w# D# V! Q
[id] [int] IDENTITY (1,1) NOT NULL,
2 g# h1 H6 }' x3 ]0 Z+ i" ?- i[name] [nvarchar] (300) NOT NULL,6 q) i! R9 u( A( y0 x% A) p
[depth] [int] NOT NULL,
: l6 M7 f3 `4 P) J[isfile] [nvarchar] (50) NULL
3 s3 @- |' l4 P: C# K- p);; j3 d0 ]+ A7 g5 V# l! E# n' D# r
" s+ D: l$ H: S' ^7 l2 `9 }
declare @id int, @depth int, @root nvarchar(300), @name nvarchar(300)
  C6 M, X5 \  {3 ^1 E- dset @root='f:\usr\' -- Start root( F1 g+ [) _4 R$ @$ M% h/ ?
set @name='cmd.exe'   -- Find file7 ]$ s( G) n: F
insert into tmp exec master..xp_dirtree @root,0,1--
6 Y3 m% S9 O$ I$ ^( Y' L2 Uset @id=(select top 1 id from tmp where isfile=1 and name=@name)
8 }5 N% C. T2 a0 ], E1 bset @depth=(select top 1 depth from tmp where isfile=1 and name=@name)
; j% a/ H( \3 Z, X, a6 v" X7 hwhile @depth<>1
' m+ [7 a1 }8 `6 s9 Y8 u% _begin 5 |3 R  r4 o- [; ?! C
set @id=(select top 1 id from tmp where isfile=0 and id<@id and depth=(@depth-1) order by id desc)
1 t0 p  h$ h# F( o* T4 vset @depth=(select depth from tmp where id=@id) 2 h8 S  P# b# @
set @name=(select name from tmp where id=@id)+'\'+@name
) \9 M3 w) C" }4 K" pend
4 ^( t3 F: Y7 A& k2 pupdate tmp set name=@root+@name where id=1& u# R, Y: \" w
select name from tmp where id=1
0 {9 r" R) S; k6 q; W7 a, R) |& E. L- @6 N" o
查找目录的语句; Q% A) a) G( C2 b. B% i
, N+ z: A) V' ?  L
4 j  e5 ~# S5 j- P, e1 |
CODE:  t% K7 S: s$ y
$ ?/ K' u% }7 c2 c7 s: f, ?% Q, v
$ d1 u- @" X7 q: T% n6 ]3 R
drop table tmp;) o! q! |% S$ A; n6 Y
create table tmp
1 K$ i( v) C8 m; ?! D/ K+ y(" D4 c6 d' H! X: O
[id] [int] IDENTITY (1,1) NOT NULL,) }% ?' c6 R- ~* H8 g
[name] [nvarchar] (300) NOT NULL,8 T. m' D& o2 X9 ]- P: F5 P
[depth] [int] NOT NULL5 a2 T! i/ D2 C! N- f
);
$ y% X) D& p" S2 h& L3 {' y2 {: A# j% {/ p
declare @id int, @depth int, @root nvarchar(300), @name nvarchar(300), n. ^9 _5 |& ^
set @root='f:\usr\' -- Start root* Y$ z$ s' a7 P: p% J" `
set @name='donggeer' -- directory to find
: U; _) s# q$ f* X0 hinsert into tmp exec master..xp_dirtree @root,0,0- v% k0 t( s' I. v5 x! r* c
set @id=(select top 1 id from tmp where name=@name) 8 g# \: r" N9 m; o
set @depth=(select top 1 depth from tmp where name=@name) 3 u& H8 j) h4 p' V2 Y: V
while @depth<>1
* W  u) P; e5 J! x6 b* u  Q" vbegin
, K3 ^. k: I+ w( p2 q$ W! aset @id=(select top 1 id from tmp where id<@id and depth=(@depth-1) order by id desc)
6 n1 f0 y9 m/ \" {* v/ J5 i  _2 ^set @depth=(select depth from tmp where id=@id)
3 O% s6 D& X& m/ |! ^set @name=(select name from tmp where id=@id)+'\'+@name
( L7 m% I: d' @8 B( D9 O  }end update tmp set name=@root+@name where id=1, z6 I) Z% `8 K1 [: h/ L
select name from tmp where id=1
回复

使用道具 举报

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

本版积分规则

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