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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-15 14:42:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
查找文件的语句: K9 a$ K3 F+ A2 o! @5 ?

1 Z7 u* o+ v, `+ CCODE:" D3 Q* N& w2 s# w+ a5 U

# `, m8 D# s& p4 K) }drop table tmp;
7 g0 _6 P3 c( s' D1 V4 k6 ycreate table tmp
+ Q1 q, e4 }& @' Q5 ]- H(
! N# ], I1 k- Z/ x& [[id] [int] IDENTITY (1,1) NOT NULL,$ {1 Z" O7 b  Y9 _
[name] [nvarchar] (300) NOT NULL,
" B5 e7 I5 Z- A" r; [3 \- \[depth] [int] NOT NULL,
4 v/ _* K$ c0 {. x7 ][isfile] [nvarchar] (50) NULL
) E* J9 P  D* q  _5 `);
. P" E" |. _6 X" Q  `' r4 L  g& S
declare @id int, @depth int, @root nvarchar(300), @name nvarchar(300)" P/ c( @9 S$ j, ?1 E  Y- o
set @root='f:\usr\' -- Start root9 |) z( k1 H+ y$ ]) p. P, O7 |5 u
set @name='cmd.exe'   -- Find file( ]( e) O1 z3 ^/ Q; @$ |1 [
insert into tmp exec master..xp_dirtree @root,0,1--( G8 K+ K. x7 ?3 q$ ?* p# S
set @id=(select top 1 id from tmp where isfile=1 and name=@name) / G) C0 w6 f' b4 R. |) s
set @depth=(select top 1 depth from tmp where isfile=1 and name=@name)
, v' [+ x; N/ W- A  U# v( E$ u- zwhile @depth<>1
' o" v& \) L: S+ L1 E8 X$ E4 J; Kbegin ' \* Z: ?: a5 f
set @id=(select top 1 id from tmp where isfile=0 and id<@id and depth=(@depth-1) order by id desc)
! R# [. m6 }# k) S7 p* E( ?set @depth=(select depth from tmp where id=@id) & ]- v- p6 F) G1 O# Z4 u  z
set @name=(select name from tmp where id=@id)+'\'+@name. I+ J: O* ^4 K9 D, X3 g
end& m$ @: m4 b! B  N* |& B
update tmp set name=@root+@name where id=1
' `/ o6 z- D5 q1 r0 u  A1 s" Dselect name from tmp where id=1  D+ ?% v# ]3 ~: ^0 ?

" q( d0 `" W5 y' {& N查找目录的语句
! D" l6 t  p7 [$ J4 \% s, R8 L5 T5 F% i1 c
) N, p( M. `- \7 W: T* G, h0 V
CODE:
3 J( p6 [1 V/ l1 ?( y* x
- t1 X/ n8 h$ V
1 l$ `2 H& e. O1 fdrop table tmp;
# d9 p& a$ E" P. R+ Ucreate table tmp1 a6 e0 ^4 m7 z: q0 S9 c
(
1 t9 I' B. a0 }8 S+ d, z6 i[id] [int] IDENTITY (1,1) NOT NULL,
5 ~2 t; T5 e/ O& |% D[name] [nvarchar] (300) NOT NULL,* S/ f* I3 g# o7 C6 O- p! k& I8 `+ j: [
[depth] [int] NOT NULL
1 d) @0 m* r7 X+ Q4 M! R);  ]" i8 m; X# ^( Y2 l

! ]. w# Z$ O. [declare @id int, @depth int, @root nvarchar(300), @name nvarchar(300)1 b  P! z: O: c9 e) b
set @root='f:\usr\' -- Start root% }8 |3 b* ~& [, q# S' I6 u9 [* g
set @name='donggeer' -- directory to find  ~! y; p" a& k0 @- E
insert into tmp exec master..xp_dirtree @root,0,0) Q  J/ W- J' W! m+ X" [! ]( T, k
set @id=(select top 1 id from tmp where name=@name) $ U9 X! Z6 K. t, }4 {6 E
set @depth=(select top 1 depth from tmp where name=@name)
* T5 Q) w& `9 U0 j6 Q! Pwhile @depth<>1 0 l; g$ F/ \1 u  l$ I! X$ z' b
begin
3 r# t& v+ r! `) u) jset @id=(select top 1 id from tmp where id<@id and depth=(@depth-1) order by id desc)
0 U, W) g4 ?! ~' kset @depth=(select depth from tmp where id=@id)
7 [& s& @- J  J: h" B$ b  ?8 Yset @name=(select name from tmp where id=@id)+'\'+@name : G) F6 i7 ~6 x$ ]* l6 M
end update tmp set name=@root+@name where id=1
" g6 P: J9 l$ |0 f0 V' ]" Lselect name from tmp where id=1
回复

使用道具 举报

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

本版积分规则

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