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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-15 14:42:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
查找文件的语句, N  u# X9 p5 W% _) `; T8 \

- g" z5 G/ ^8 k; WCODE:
7 ?( [; X) D# }2 |  x9 ^. W% Q# N9 ~1 c- k. _' f
drop table tmp;
, M8 U; m! r0 p; Lcreate table tmp
! C: V3 @/ U7 H/ e(/ }5 F$ x7 H) X$ L! U! v
[id] [int] IDENTITY (1,1) NOT NULL,
% `# v9 p0 A* R7 S[name] [nvarchar] (300) NOT NULL,
! v9 [* J$ _' D" E/ o[depth] [int] NOT NULL,3 q# t' T6 i- d- z0 d" F+ ~
[isfile] [nvarchar] (50) NULL0 A# _1 e# y- f. B" p( p
);$ _  T7 c; Y% `' Y' y( z* k+ K9 g1 D; L
1 b' {% U6 V- V( R8 L' E3 C
declare @id int, @depth int, @root nvarchar(300), @name nvarchar(300)
' g0 f! `3 R* n, g3 uset @root='f:\usr\' -- Start root- c9 z% L5 e0 C; `3 \
set @name='cmd.exe'   -- Find file1 W, [' Y2 m; p) n( W* x- h5 R
insert into tmp exec master..xp_dirtree @root,0,1--
1 v# e: l2 Q/ w+ Rset @id=(select top 1 id from tmp where isfile=1 and name=@name)
6 {8 [- H! p% W6 Cset @depth=(select top 1 depth from tmp where isfile=1 and name=@name)
0 l- O% c" o: U$ ^( Z- cwhile @depth<>1
' H: Q( X3 D) V1 j/ e% pbegin 9 M7 c0 v0 A1 n3 R% k4 _
set @id=(select top 1 id from tmp where isfile=0 and id<@id and depth=(@depth-1) order by id desc) ) y$ v( `1 C# D9 V& K8 q
set @depth=(select depth from tmp where id=@id)
# X0 l2 i, O2 s+ oset @name=(select name from tmp where id=@id)+'\'+@name
2 [  _# s  e$ e7 E, g7 @- vend8 E3 D% Z  |$ h
update tmp set name=@root+@name where id=1
0 B" L0 l; @; A" k3 s* Qselect name from tmp where id=18 S( m. ]* a* E$ C, U. Z

$ k( Y6 p6 t6 I! N2 k8 J1 |# m# k4 L查找目录的语句% ], L% Y7 Z, g8 Q: }5 s, z6 {
. E" }" f: v1 x6 r/ ]/ k2 u* I
$ R: k7 L- m+ g1 d) G6 J4 t! J
CODE:* E. H  s& ^! ^' c

+ A- L5 s* j  ~6 w
& z0 A: p$ z% \- O6 r5 x; Xdrop table tmp;
5 s8 f2 Y  i. ^" j" Pcreate table tmp
, I1 T( q, h- s/ F(, G$ ?6 K: Z5 \7 s6 e* Q1 t
[id] [int] IDENTITY (1,1) NOT NULL,6 c' R# u/ b. n8 ?3 N# [
[name] [nvarchar] (300) NOT NULL,: u  s" p1 p- K; V
[depth] [int] NOT NULL
8 @  s  l! x9 x$ ^);
/ p2 C2 S1 r8 K6 U& u
7 b. x  @0 Y$ r- p7 ^; b. mdeclare @id int, @depth int, @root nvarchar(300), @name nvarchar(300)
9 [7 c  g! i& Fset @root='f:\usr\' -- Start root
& h# |. o0 Z6 hset @name='donggeer' -- directory to find
+ x8 v/ a# ~0 D: U9 U1 Y, Rinsert into tmp exec master..xp_dirtree @root,0,0" B- v8 `" G9 x
set @id=(select top 1 id from tmp where name=@name) 6 P& p. f/ Y6 l" P
set @depth=(select top 1 depth from tmp where name=@name)
8 ^: _4 \2 S# o; Fwhile @depth<>1
. m% \, A) e  abegin ) N  x- B7 n, ~  b' l; {
set @id=(select top 1 id from tmp where id<@id and depth=(@depth-1) order by id desc)
' h) U: R! a/ \' ~: A+ u7 bset @depth=(select depth from tmp where id=@id)
: q1 n& q. u7 H( Lset @name=(select name from tmp where id=@id)+'\'+@name
$ I& ^- C* O& hend update tmp set name=@root+@name where id=19 ?! u1 {4 j' y2 V6 ]1 t2 w
select name from tmp where id=1
回复

使用道具 举报

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

本版积分规则

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