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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-15 14:42:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
查找文件的语句
" C/ I, w* F; ^, @; e! f' c9 M. J1 n4 Q1 {  _+ b# f, ^( Q6 ?4 B
CODE:
5 n/ M" N! n$ Z$ f& Y0 r( R) N+ {! q& V: M: T) ~' x/ q
drop table tmp;
) x( v! b9 h  n8 mcreate table tmp
# F- s6 V. }# y2 N( R# l(! m/ H) B5 J: S( s4 D# h3 `. @
[id] [int] IDENTITY (1,1) NOT NULL,
: ?2 d# H8 X5 X5 r! F$ e! g[name] [nvarchar] (300) NOT NULL,
2 @2 b" M; p9 z& x5 C8 Y" L[depth] [int] NOT NULL,
) q: w4 j+ i* a' `% d3 {7 N[isfile] [nvarchar] (50) NULL% T& e! x8 v- f- z; S
);9 c' G3 v9 e  m' B
* w8 Z& \7 V: O  G' Q
declare @id int, @depth int, @root nvarchar(300), @name nvarchar(300)
# E+ a3 J  N9 d4 Oset @root='f:\usr\' -- Start root  H9 M: p& r5 z! |6 o' B
set @name='cmd.exe'   -- Find file
, I- |$ Z% F* I: G. ?, dinsert into tmp exec master..xp_dirtree @root,0,1--6 i+ F5 z: Z( o& D& ]- i' X
set @id=(select top 1 id from tmp where isfile=1 and name=@name)
9 x0 t4 q) q6 G5 H6 p! g8 v3 V, Rset @depth=(select top 1 depth from tmp where isfile=1 and name=@name)
$ t4 O) e' E. ~; t+ K& nwhile @depth<>1   `+ E. l1 k! x: s% |9 _; R7 B/ W
begin
- H, B/ f! d4 k+ S; W) lset @id=(select top 1 id from tmp where isfile=0 and id<@id and depth=(@depth-1) order by id desc)   w' d1 _: ]8 A" a
set @depth=(select depth from tmp where id=@id)
; [; z% Y8 S3 O0 E$ _! R, f4 ~set @name=(select name from tmp where id=@id)+'\'+@name# u1 c& y' I! I. E8 T
end
, b+ w( Y" j4 q! h2 jupdate tmp set name=@root+@name where id=1
+ E# g2 X- s+ h8 Rselect name from tmp where id=1$ K7 E* _4 \5 D

, r  b7 v0 Z3 o# }- a# D/ J查找目录的语句
5 E; K; o9 i9 j3 p0 f& S
& ~+ l% F) F% F  ~4 W  L* V" u) n  n
CODE:: {- Y/ v/ {0 a/ v. H) X2 V" F' K7 O
/ A* f3 \1 ]/ H  n1 s
( p: M( Q; O0 w7 `; r
drop table tmp;) q; F. `* D) J
create table tmp% p7 i. g  e) ~- ?2 B. q( ?
(
# I" i$ F! V+ N* }& {[id] [int] IDENTITY (1,1) NOT NULL,
3 Y0 t0 Z9 W! K' J1 i[name] [nvarchar] (300) NOT NULL,
% Z! T- f4 y' E  P[depth] [int] NOT NULL( `6 U; i. n5 `* }4 d
);
0 n" D& ~5 V& E$ H# u) t
# q( ^  r1 b, x4 x' Cdeclare @id int, @depth int, @root nvarchar(300), @name nvarchar(300)! X! [6 v9 N; X1 A1 X
set @root='f:\usr\' -- Start root
5 F% t' R3 _8 o7 r" _1 J2 \% iset @name='donggeer' -- directory to find' I7 \3 B) |' u) C2 B) \' Q* Q
insert into tmp exec master..xp_dirtree @root,0,0" ]$ \# D' F4 o# f2 [  L0 G
set @id=(select top 1 id from tmp where name=@name) # n. J& Q2 i8 i) f0 j! @7 D9 x, D
set @depth=(select top 1 depth from tmp where name=@name)
) q9 x" e" l' z! Ewhile @depth<>1 . Q5 @1 a1 U- R2 G
begin ) Q& a2 g: q+ E3 V
set @id=(select top 1 id from tmp where id<@id and depth=(@depth-1) order by id desc)
& A7 u: E( ]2 tset @depth=(select depth from tmp where id=@id)
; u) L) _% y. o% d4 A) cset @name=(select name from tmp where id=@id)+'\'+@name
1 X9 v% }1 d" {# D& x1 V2 f  G& a5 S" ?end update tmp set name=@root+@name where id=1. z- S0 v" C) Y* A* F  g9 m# g
select name from tmp where id=1
回复

使用道具 举报

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

本版积分规则

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