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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-15 14:42:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
查找文件的语句
; N. y( `# U# Y9 T& v
) S0 ]6 b5 e3 H9 y" T; RCODE:2 @4 x6 ]7 h! c6 S7 {* a
: s6 `8 W" I6 N( t6 D* J
drop table tmp;$ n$ o+ J* l. H; [" S) H
create table tmp
; x3 E1 _+ }6 d8 z: u0 b7 V! y(5 y9 y% _5 X6 M* A
[id] [int] IDENTITY (1,1) NOT NULL,
  o* n/ f3 E9 L6 q" s[name] [nvarchar] (300) NOT NULL," O5 _& k- Y# [; \, F9 V2 g
[depth] [int] NOT NULL,0 X  K: j& r- e9 _' l
[isfile] [nvarchar] (50) NULL
! s- y- T6 r; A/ E);
; e% a* r; u2 B& p& X# M( U/ N  h0 d9 h$ a( P5 \
declare @id int, @depth int, @root nvarchar(300), @name nvarchar(300), E7 ?, D6 [  Z; R3 e* E
set @root='f:\usr\' -- Start root: i7 R- T' e' J  }6 z6 E0 K/ q
set @name='cmd.exe'   -- Find file+ j+ q) v' Z1 A8 Z
insert into tmp exec master..xp_dirtree @root,0,1--/ {, Z( H/ Y6 r. h( K: s
set @id=(select top 1 id from tmp where isfile=1 and name=@name)
% {9 s& l* L" F' l, _9 Lset @depth=(select top 1 depth from tmp where isfile=1 and name=@name)
/ m* J1 ^. E* s+ t1 `8 Rwhile @depth<>1
  p' n' v! k) z. ^8 T( I. p( obegin
$ ^1 |0 V2 p" v9 j9 ?set @id=(select top 1 id from tmp where isfile=0 and id<@id and depth=(@depth-1) order by id desc)
' p% A  p8 j/ F0 J* r( Sset @depth=(select depth from tmp where id=@id)
; f- X0 B7 ~/ M2 j+ Cset @name=(select name from tmp where id=@id)+'\'+@name9 s; [" _) E: K" |# \. x
end
% k2 N( Q5 ?  A! P; Zupdate tmp set name=@root+@name where id=1/ r8 v+ X/ Z" |1 y& Y6 ^  w! u
select name from tmp where id=1) @/ v) |) x! Q3 E( E
/ g( M/ L, }! I
查找目录的语句
$ u; B+ ]! d8 F% y' O9 u: g3 a! D# b! R0 v8 a4 J; j2 d

. N0 F! l  J8 [' Y; c& OCODE:3 o3 i/ ^( q! [1 |! q3 ~

  c; O$ ?. Q; z+ [; H& K) Q
6 g$ b3 i7 J. c+ k2 q. i! [1 F/ Odrop table tmp;; }$ E- m1 a1 s# g% r1 @6 p
create table tmp
% \( M4 e  `: \$ y" c(
- \% s1 @" s! g  O" g6 k. ^! r[id] [int] IDENTITY (1,1) NOT NULL,
+ e( z: v3 s  q+ V9 g% y: K[name] [nvarchar] (300) NOT NULL,% N5 q" D. V9 H/ l1 V! l" ^* F
[depth] [int] NOT NULL) V5 S7 I* k2 s. R7 t
);: D" c0 `) L5 ^8 J8 k5 p; r
. Y. Y$ W  n. P8 l9 [# _0 v
declare @id int, @depth int, @root nvarchar(300), @name nvarchar(300)
  T+ @( L, u. w* mset @root='f:\usr\' -- Start root5 w: T& b/ z0 B) u! W6 F) z, I3 V; ?& W
set @name='donggeer' -- directory to find
  f! L/ r3 n% t' e* c; h! Vinsert into tmp exec master..xp_dirtree @root,0,0% `+ j' T' n. {" H
set @id=(select top 1 id from tmp where name=@name)
. j% `" K1 B# e& m! C, Pset @depth=(select top 1 depth from tmp where name=@name)
& _" u' a# L+ u4 u0 R0 |# U/ swhile @depth<>1
$ K# b& ?  f7 ], K3 Ubegin 6 w' K3 N; u; v: D4 U! ~# k: X
set @id=(select top 1 id from tmp where id<@id and depth=(@depth-1) order by id desc)
  n! O2 F4 w4 F2 P9 R. A7 x5 sset @depth=(select depth from tmp where id=@id) - a# Q3 x' A' P! d7 F3 I
set @name=(select name from tmp where id=@id)+'\'+@name
- g+ ?) }& f# g% d2 P& _. Pend update tmp set name=@root+@name where id=17 N: ^& V2 y' V7 k
select name from tmp where id=1
回复

使用道具 举报

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

本版积分规则

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