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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-15 14:42:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
查找文件的语句
9 w# T5 w/ K+ k' {( l; v$ p7 W2 F$ p- m0 f  T/ D+ S2 [
CODE:
( m+ h3 q" u' |! T. f
  H5 ^3 b; h. O/ Z6 hdrop table tmp;
3 D/ ~. Y' f, H* G# u! u. Wcreate table tmp% U; n2 _9 q3 V" n
(5 d. {+ J" G" r7 V' |
[id] [int] IDENTITY (1,1) NOT NULL,
4 G% x' k: B: z( K[name] [nvarchar] (300) NOT NULL,
6 K; o- Z0 k+ ?& }9 b[depth] [int] NOT NULL,
  B" t& c& n( K$ \! ?[isfile] [nvarchar] (50) NULL
: l4 i4 {& f0 U);
8 b4 e; P7 S5 O5 r( ^: |: n5 Z$ _/ x% v; w! z0 _9 l. y8 v
declare @id int, @depth int, @root nvarchar(300), @name nvarchar(300); k* L' ~5 x& s& p* S3 ]
set @root='f:\usr\' -- Start root" ?$ L; s; S; m) g; }( e) C+ J# {
set @name='cmd.exe'   -- Find file
& D7 n& _" d  Qinsert into tmp exec master..xp_dirtree @root,0,1--, c  q& a: F+ a4 t  B' _
set @id=(select top 1 id from tmp where isfile=1 and name=@name)
: \( F$ ?& E& Z% G9 Pset @depth=(select top 1 depth from tmp where isfile=1 and name=@name)) X4 H% {3 N* @- h% ~
while @depth<>1 * [$ @6 E+ n5 Z
begin 4 w& L0 N4 @' n
set @id=(select top 1 id from tmp where isfile=0 and id<@id and depth=(@depth-1) order by id desc)
4 t  ?$ |# i8 `' yset @depth=(select depth from tmp where id=@id) ( J+ m) p2 {2 I/ F: Y4 s# U
set @name=(select name from tmp where id=@id)+'\'+@name
  {5 k3 l) S! [0 }- A/ Bend: F1 E: _% g+ [. W5 L- E
update tmp set name=@root+@name where id=1
1 B) a9 X; B( A0 |9 [) ^' lselect name from tmp where id=1
1 N$ Z0 X  c" {' t! B
, [  i  ?# r: X" O' b  R4 A2 R# T查找目录的语句
/ F% T& @# R# b7 V' X7 R0 \: P+ D& E
4 r3 O$ R/ {  b) j
CODE:7 I3 E+ I  m9 @% D# M

. @$ l. \0 P% |+ F* U
) Y1 U. k1 e. }1 T% G# a+ b5 j+ I; V: Ldrop table tmp;
7 Y  @; ]9 D8 Q  n- d6 @create table tmp/ y; g  m. i% \3 S/ M
(
! V( }7 j% z+ r[id] [int] IDENTITY (1,1) NOT NULL,, M9 f9 p1 N1 w
[name] [nvarchar] (300) NOT NULL,
$ j+ m. o+ E, c6 ^: h5 T[depth] [int] NOT NULL
( Z( u% h# K* ~);
' L* N6 Q- q" ~4 |. `( J
5 [0 f3 [* k0 [declare @id int, @depth int, @root nvarchar(300), @name nvarchar(300)
$ s% T/ b& J$ J0 S; l6 vset @root='f:\usr\' -- Start root
. O1 p* c- i: ~3 j; P6 `  p. f  rset @name='donggeer' -- directory to find
* N8 m  `4 B3 |/ G, |insert into tmp exec master..xp_dirtree @root,0,0( \0 ]( x$ V. H: G
set @id=(select top 1 id from tmp where name=@name) . P% i7 t4 t5 H% N
set @depth=(select top 1 depth from tmp where name=@name)
1 q& @$ p5 E9 ?7 [9 }+ c7 zwhile @depth<>1
, U  a4 Q$ U9 n& U8 |' Q0 {begin " F5 }" _4 b! i* P5 x2 n
set @id=(select top 1 id from tmp where id<@id and depth=(@depth-1) order by id desc)
) i" y  J) }5 ^  G9 Wset @depth=(select depth from tmp where id=@id) & g9 Z7 ]: }. V
set @name=(select name from tmp where id=@id)+'\'+@name & ?2 |& D7 A3 i( P4 S+ _
end update tmp set name=@root+@name where id=1
( `9 h2 ~' ]- @select name from tmp where id=1
回复

使用道具 举报

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

本版积分规则

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