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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-15 14:42:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
查找文件的语句/ ~# u$ C: N. r& P, Z0 b8 u

8 S6 }% [2 e6 B, hCODE:2 U, q  k3 [3 ^( G$ c/ n  K
  W- A$ c) t* O, z' X* l
drop table tmp;
4 A; u, ]2 q& X* hcreate table tmp
7 o: ^$ r" w) w* Y$ a(
/ Y' S. [- G) [9 B0 o' Z, B! w[id] [int] IDENTITY (1,1) NOT NULL,* V3 k) C( _* T/ a' h
[name] [nvarchar] (300) NOT NULL,
  E( s% ^, d1 I# s[depth] [int] NOT NULL,- w& s' C) R/ r
[isfile] [nvarchar] (50) NULL, N0 o4 a4 m+ D% p: e+ d" [% @8 l
);8 S# O+ I% j6 f4 e$ ^7 z. ?
" G5 t3 m- T* M' ^' v% ]
declare @id int, @depth int, @root nvarchar(300), @name nvarchar(300)
9 s2 ^7 T0 \3 Z# `- j3 ~1 D/ Z+ t: Fset @root='f:\usr\' -- Start root
/ u/ X$ e3 y7 n! n; fset @name='cmd.exe'   -- Find file5 c4 _& v# f5 u5 Q
insert into tmp exec master..xp_dirtree @root,0,1--
4 v5 }1 d" L' I, A  uset @id=(select top 1 id from tmp where isfile=1 and name=@name) $ q( n6 H' k/ G7 B- q# i9 B- ]& Z
set @depth=(select top 1 depth from tmp where isfile=1 and name=@name)* q4 U7 f! r3 T2 B( Y  ?
while @depth<>1
+ S1 ?& t3 r3 K7 R# W$ fbegin ) E# {- c, m* p% X, w3 P
set @id=(select top 1 id from tmp where isfile=0 and id<@id and depth=(@depth-1) order by id desc)
% y+ Y# r3 x% B$ F' C( e- W& Gset @depth=(select depth from tmp where id=@id)
1 q$ P! s  N# m# ?- `3 zset @name=(select name from tmp where id=@id)+'\'+@name4 _' e! e8 N: ~* y! Z
end
: {7 k; E" c2 Y% [8 @/ Oupdate tmp set name=@root+@name where id=19 ^8 c& w" q+ k( q# O
select name from tmp where id=18 L# l* v- @% T: N; L: X% @! A
8 r0 S+ R3 M/ v. d& b; X2 [0 V
查找目录的语句( l; f  k  G0 m
8 i7 F# u% }* u

: v2 R* E; E# [+ ?/ @7 Q, zCODE:8 A3 Q; @+ K! n

* Z; M& f+ m' {! R- K2 W2 z! x! A5 {0 N- w
drop table tmp;
/ `+ w( E& f  j3 ]6 K, Pcreate table tmp
& Q- N" R" P) z+ r1 b( T, t7 i1 y0 l* E(
; o# p: r3 b5 [) o( v9 X[id] [int] IDENTITY (1,1) NOT NULL,8 K0 D, A. J9 ^; m# ~: U
[name] [nvarchar] (300) NOT NULL,: k0 V1 G* G: ]
[depth] [int] NOT NULL' s6 z1 c5 `/ X# Q
);7 ]: F: B: T6 A* V; N
  p7 k. g3 f' p; k
declare @id int, @depth int, @root nvarchar(300), @name nvarchar(300)
/ v0 k) p( G& u1 y( y& h/ Zset @root='f:\usr\' -- Start root; w9 I. i, g! V# V8 ^
set @name='donggeer' -- directory to find
, p+ Z; n' p: m( winsert into tmp exec master..xp_dirtree @root,0,0
+ ]6 {5 B1 }6 X. g, N6 eset @id=(select top 1 id from tmp where name=@name)
2 C1 k  _2 {8 b9 V+ M% y$ Aset @depth=(select top 1 depth from tmp where name=@name)
/ E9 `& O" E- E$ Rwhile @depth<>1
% i+ d) b. v; j) j' S) k7 Sbegin - h4 e- n3 a2 Q
set @id=(select top 1 id from tmp where id<@id and depth=(@depth-1) order by id desc)
# Z' u8 K4 P* P! m6 c6 jset @depth=(select depth from tmp where id=@id)
6 x" W8 b1 E$ a# _set @name=(select name from tmp where id=@id)+'\'+@name 8 l! _9 D" J: l# ^- I- v* C
end update tmp set name=@root+@name where id=1
- I) N# S3 K) B$ v( i9 a; Zselect name from tmp where id=1
回复

使用道具 举报

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

本版积分规则

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