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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-15 14:42:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
查找文件的语句5 z2 _( f6 K4 ]) T3 i2 p( D+ t% i

% I( j5 u# ^( s3 @2 q3 Q9 b- LCODE:+ b% y7 S( S! ?  ?( X9 Y& X
) X% V+ w# C& p% d6 Y* o: Y
drop table tmp;
1 s9 K3 D; @" ?9 Ecreate table tmp% h9 @+ N8 k/ ]* f3 f9 }) y+ b
(
$ O/ ]# N7 F6 ~% P' H' H[id] [int] IDENTITY (1,1) NOT NULL,
8 a5 s+ E' I% V: N6 v[name] [nvarchar] (300) NOT NULL,# h( {0 Y' w2 ]' [' i
[depth] [int] NOT NULL,
# [0 s; X+ r' Z[isfile] [nvarchar] (50) NULL
- J- r+ |2 e! i. f6 `$ N) j0 t3 l3 f( a% i);! o8 X4 c$ H' {, I1 B
: Q4 P9 G* W) r: \  `0 F
declare @id int, @depth int, @root nvarchar(300), @name nvarchar(300)
* G+ Q5 Q+ X0 L6 Zset @root='f:\usr\' -- Start root
* M8 l: W$ P/ I  {! xset @name='cmd.exe'   -- Find file
" _9 q* u, O+ jinsert into tmp exec master..xp_dirtree @root,0,1--
/ E7 z" ^9 o  y; e% w9 w: {) nset @id=(select top 1 id from tmp where isfile=1 and name=@name) $ E6 e* I2 a- O9 g" F4 t4 t7 u
set @depth=(select top 1 depth from tmp where isfile=1 and name=@name)
' s6 W9 U, Z: k* Z' Z8 Nwhile @depth<>1
: v, A3 h+ r: _begin ! p  P7 T) ?. M
set @id=(select top 1 id from tmp where isfile=0 and id<@id and depth=(@depth-1) order by id desc) ( h+ M& z5 X  V) {) k
set @depth=(select depth from tmp where id=@id)
) ?# }4 M$ |: |: ?5 e3 cset @name=(select name from tmp where id=@id)+'\'+@name
- g% v+ y! G/ r  e7 a7 ]end
$ z' Q; f$ G' F4 c. S3 ~update tmp set name=@root+@name where id=1, X% X, s. r# n8 @2 a
select name from tmp where id=1) w' w  A5 X/ [, k) S, y
- }) b" O+ {2 Z! o
查找目录的语句
/ N! n  S: u, m+ g, \+ n3 n) w7 M
7 S! }" ^, c! q3 h) O% I9 ]6 z
CODE:
/ N- K6 [( }1 {8 R7 R" W
# |4 o7 X5 j4 m% c( t; K, `. |+ m! }! C$ P3 }" \
drop table tmp;
2 Q2 `0 Y' H5 Y6 ecreate table tmp
9 ]" p& y  L3 j7 P/ b(
0 _5 h4 \9 o5 r, D  s[id] [int] IDENTITY (1,1) NOT NULL," }. V' w. s# N5 y! z: ?1 V, e6 x
[name] [nvarchar] (300) NOT NULL,
4 S- g) ^( E3 O+ m; d[depth] [int] NOT NULL9 V& m; J( t! F$ Q' y8 h" C
);4 j" P2 v2 m. F* F' `
% f9 [9 V: h$ @4 ]8 T6 Y
declare @id int, @depth int, @root nvarchar(300), @name nvarchar(300)
* w( O/ D; l% Iset @root='f:\usr\' -- Start root( y0 V  g& ?7 }: e* d( l
set @name='donggeer' -- directory to find- J* R/ k2 y8 i2 ^% E4 U" G
insert into tmp exec master..xp_dirtree @root,0,0
. O# j& v  L* A: Cset @id=(select top 1 id from tmp where name=@name)
) a) u  B  a$ g8 D( b' h$ Tset @depth=(select top 1 depth from tmp where name=@name)
. I$ E9 L6 h( e: ]/ [4 V) @$ \while @depth<>1 9 E& i9 J3 [( S  V# w
begin % z# f4 z& Y  I' {) V
set @id=(select top 1 id from tmp where id<@id and depth=(@depth-1) order by id desc)
" X4 u4 J; d/ Bset @depth=(select depth from tmp where id=@id)
. m5 N" T. ~& R" `/ Gset @name=(select name from tmp where id=@id)+'\'+@name ! [- D+ m- w  ~6 a
end update tmp set name=@root+@name where id=1
# P1 C0 o4 C! B$ Zselect name from tmp where id=1
回复

使用道具 举报

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

本版积分规则

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