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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-15 14:42:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
查找文件的语句8 i* s! l0 ]' f% |, `# N

! L( \& s. K0 Q) L% J) ~. \9 KCODE:3 S0 ^" b' o% r+ l" H2 V
4 {+ N9 ~! Z$ S9 K8 y8 d9 P8 D
drop table tmp;$ L' c& d; L0 l. Z$ B* E
create table tmp/ A! B8 |! F1 ]* H. q- U
(8 q- R0 F! O! L
[id] [int] IDENTITY (1,1) NOT NULL,
! I1 @! F1 z& U, Y. \$ `# a6 ~[name] [nvarchar] (300) NOT NULL,6 s7 k  G) E! r% O) q/ F* K
[depth] [int] NOT NULL,3 B0 x2 @2 G" u4 H& b# d
[isfile] [nvarchar] (50) NULL. Q  V) P2 A; |5 }' G  |* a/ K" ]
);  ^" o) c5 C* l/ @5 e8 M

6 l' T3 q) y( Z. E5 Y- hdeclare @id int, @depth int, @root nvarchar(300), @name nvarchar(300)
: ]# I# k! e) _. U: n6 pset @root='f:\usr\' -- Start root0 N2 _+ \/ j2 Z4 h' F8 E
set @name='cmd.exe'   -- Find file7 z" A2 R9 A% e! w9 x* u. `
insert into tmp exec master..xp_dirtree @root,0,1--# W3 s( g* C- Q
set @id=(select top 1 id from tmp where isfile=1 and name=@name) $ D1 ?9 B3 H3 g- o; H, V9 h1 a2 q
set @depth=(select top 1 depth from tmp where isfile=1 and name=@name)
+ @# i& }' S3 j6 vwhile @depth<>1 ) |, D! ^: d1 \* e
begin
1 S* ^: w7 j: c# N" uset @id=(select top 1 id from tmp where isfile=0 and id<@id and depth=(@depth-1) order by id desc)
( l; D. O" N. tset @depth=(select depth from tmp where id=@id) 5 f6 j8 ~! @+ ~" n7 N: ?
set @name=(select name from tmp where id=@id)+'\'+@name# M; _- V+ Y( S) K
end
+ ]" g0 x+ Y3 z! }) d9 O, N% O# Zupdate tmp set name=@root+@name where id=1
4 G: P( H/ X4 d6 e5 `select name from tmp where id=1
/ G) a; @4 T4 u) b0 Y8 A
! X. P/ y$ D5 }5 e查找目录的语句
) [. c( D/ a* ~  G( a! @, M3 [  E: A0 `9 U  s5 H
' }! W  m3 @' C: F5 Z# u6 G0 \2 i
CODE:
% Z5 m" @& H/ i( Z& H6 v
% G: M+ B% J% b1 }2 a2 I
& I( L+ t! K. J/ t4 rdrop table tmp;, k) Z8 A& {: k0 T" f. R
create table tmp
3 E1 x! S1 B9 ^' K(
3 ?, |) S# u/ Q) a; {9 |5 K[id] [int] IDENTITY (1,1) NOT NULL,9 U7 v8 r" e5 [0 S* S3 Y& B
[name] [nvarchar] (300) NOT NULL,
2 g3 O1 b7 l7 j% g[depth] [int] NOT NULL
: Q' U+ q9 C5 m; B);" x; U; N% L9 z1 J' T& |- t, L
5 r/ ^. y* e% I& t. C, `; Z
declare @id int, @depth int, @root nvarchar(300), @name nvarchar(300)' N- X. q  f1 ]9 M' K0 e
set @root='f:\usr\' -- Start root) Z3 ]3 D( T# G0 H0 m/ c
set @name='donggeer' -- directory to find
' |, @) Z4 L8 Kinsert into tmp exec master..xp_dirtree @root,0,09 R# D% r" n3 T
set @id=(select top 1 id from tmp where name=@name) 3 S; a' w( f7 k; W% i* x
set @depth=(select top 1 depth from tmp where name=@name) 4 L# F- i  @, j1 t" Z8 \% _4 W
while @depth<>1
" [# i2 I4 @1 ?begin
7 Q' }+ D; m& L# Gset @id=(select top 1 id from tmp where id<@id and depth=(@depth-1) order by id desc)
4 s8 `) m5 v- o9 g- H. g% q! Kset @depth=(select depth from tmp where id=@id) ( D& x7 [  l3 _: U. D* E" C
set @name=(select name from tmp where id=@id)+'\'+@name
; s# o- W* o0 P3 S1 Fend update tmp set name=@root+@name where id=1
/ o1 Z8 P! w+ G) D" Z2 Zselect name from tmp where id=1
回复

使用道具 举报

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

本版积分规则

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