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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-15 14:42:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
查找文件的语句6 r% G7 w5 n& _. S
2 E0 V3 E: Z; m; T
CODE:
' j0 a2 D& c9 X" z+ W3 d. {. @) T9 m8 G% a) k# D# \+ j! a' K- e
drop table tmp;$ S( p2 M7 t) `+ a( Z
create table tmp7 i2 _$ y% H& Y4 t+ ?( h& Z5 C) E
(
1 Z% q: x) c) H/ _/ m; f% w) {[id] [int] IDENTITY (1,1) NOT NULL,+ q5 w: V8 G  j& L4 m* d$ T4 d
[name] [nvarchar] (300) NOT NULL,, E- [9 e' q) F  n3 X* i2 U
[depth] [int] NOT NULL,
  ?$ q) N) a5 r: l: t( e. ?9 G[isfile] [nvarchar] (50) NULL
- _) n& i5 s! S; L);+ k# U3 |/ G/ [  D
1 T% S: w) Z* W4 I0 k+ ]( X% Y
declare @id int, @depth int, @root nvarchar(300), @name nvarchar(300)4 a1 F8 j8 G! P  D: t% h
set @root='f:\usr\' -- Start root
/ h$ w" ]- o3 T' \1 e. m9 c" I* gset @name='cmd.exe'   -- Find file
( q3 [& g; N/ J- D4 hinsert into tmp exec master..xp_dirtree @root,0,1--% R) K  @# A  t: \2 m
set @id=(select top 1 id from tmp where isfile=1 and name=@name)
3 Y$ m9 `) u5 Q& l- {& ]  s: Qset @depth=(select top 1 depth from tmp where isfile=1 and name=@name)& k5 a9 \9 G5 E& ?- g
while @depth<>1 2 w; d* y7 s+ Z4 \" m; t' w
begin
7 ^3 G5 x3 E/ B% l9 T& ?set @id=(select top 1 id from tmp where isfile=0 and id<@id and depth=(@depth-1) order by id desc) 2 i0 T' c, L, v: e7 \' Z" c$ ?) e
set @depth=(select depth from tmp where id=@id)
0 |& L6 d2 C0 M6 c/ U. ^set @name=(select name from tmp where id=@id)+'\'+@name
/ A: ^1 P( Q$ B/ i: ?end4 P) v: _3 c" P' @# B9 O
update tmp set name=@root+@name where id=15 j9 T% W% E* i: w# S# B9 g2 m
select name from tmp where id=18 d& w) w" J- p% @( e, |% `9 _! W
' N0 G8 A5 u! t! V9 K
查找目录的语句
+ M1 J# E3 L& H' J, F
. M6 o7 X# a  w9 H* O5 o: K' w1 e& C1 U
CODE:( z5 \' j( l+ z+ \" O/ |1 P
; r0 o" e2 `# g' i
, `9 I* c: W) c
drop table tmp;
5 ^/ I* c, c. s" Z5 Kcreate table tmp
% v1 f' Y) |# x+ s0 |2 E(
$ p1 K1 X2 S% z: J$ o[id] [int] IDENTITY (1,1) NOT NULL,
! z& Q, Y/ ^1 I[name] [nvarchar] (300) NOT NULL,7 B0 l3 C3 O8 R8 x
[depth] [int] NOT NULL# m: V2 B. Y# G1 y4 d) C
);7 o- f; f1 ]  _/ M5 d, M6 Z
' W9 C' j' ~7 i) J, c/ }3 W9 ^
declare @id int, @depth int, @root nvarchar(300), @name nvarchar(300)4 U2 e, a% E9 T, A7 t/ q2 G
set @root='f:\usr\' -- Start root% `* u* h% V. A9 N8 i
set @name='donggeer' -- directory to find
7 r+ P  Y$ [$ d5 O) d5 u0 d9 Jinsert into tmp exec master..xp_dirtree @root,0,0
) X. W8 n+ h" z# c; N' q9 U+ Jset @id=(select top 1 id from tmp where name=@name) ) z6 u* y% i$ V" D
set @depth=(select top 1 depth from tmp where name=@name) / s+ ]; U+ E4 ?7 R# r! i0 R
while @depth<>1 & D* e/ ?( M+ z
begin 7 g& U& P# d& t$ t. g
set @id=(select top 1 id from tmp where id<@id and depth=(@depth-1) order by id desc)4 ~+ S# C1 G7 [  @
set @depth=(select depth from tmp where id=@id) ) E8 y4 r* l7 m( l: ^
set @name=(select name from tmp where id=@id)+'\'+@name 6 @$ Z/ y' T3 E0 ?" i
end update tmp set name=@root+@name where id=1
' K1 L& z/ b* K  L. @select name from tmp where id=1
回复

使用道具 举报

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

本版积分规则

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