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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-15 14:42:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
查找文件的语句
- G5 O# J8 Z6 B7 K! U
) {1 O2 x+ ]6 ~  h2 J1 m; zCODE:9 g& v, D0 t* U. J5 m# |

9 \4 d, T2 j, K5 Y3 i! j& bdrop table tmp;+ Y5 g$ C* R. q* X- t- i% O
create table tmp- V. v- d9 Z  q6 o9 f0 I
(
' D& a4 v% F, u6 j[id] [int] IDENTITY (1,1) NOT NULL,
. Q- `, K( Y* k1 D' o  J2 X3 e4 w: x[name] [nvarchar] (300) NOT NULL,: {7 Y" \/ ^6 L6 z& \- R/ v8 T
[depth] [int] NOT NULL,
$ U* W/ ^7 X5 B* Y; w! {5 w) o[isfile] [nvarchar] (50) NULL  M0 a! [2 j" Y& a
);- A& _6 i) Z8 U+ e

3 i7 Q0 O, \/ z, C) Mdeclare @id int, @depth int, @root nvarchar(300), @name nvarchar(300)
( R5 a! ^& }( |) {, V5 Y2 W. }set @root='f:\usr\' -- Start root+ G7 w$ ^+ B* {- G
set @name='cmd.exe'   -- Find file# P. c& z/ k. Z. }) x% v- A2 _$ l
insert into tmp exec master..xp_dirtree @root,0,1--
) Y- s+ E. W2 }% T3 U! m' l/ ^set @id=(select top 1 id from tmp where isfile=1 and name=@name) 7 N  S- R9 Y' c' p- T
set @depth=(select top 1 depth from tmp where isfile=1 and name=@name)
5 |4 f) ^  D% r" K& U1 Lwhile @depth<>1
- H1 i0 I  }2 M  [2 y" F9 tbegin
5 D# A, ~5 |6 l) fset @id=(select top 1 id from tmp where isfile=0 and id<@id and depth=(@depth-1) order by id desc)
2 A# ?* Q6 D/ V$ X. X4 g$ Mset @depth=(select depth from tmp where id=@id) 1 k+ s9 F; s7 i( o) x/ T( q! _+ _
set @name=(select name from tmp where id=@id)+'\'+@name
; V' z8 q* S2 f4 g- ~/ Zend
! o! M  {5 u) s" j: x- Tupdate tmp set name=@root+@name where id=18 O4 E+ A9 [7 v" O% n1 m) P
select name from tmp where id=1
" \. n  J8 y9 w" H, P$ |, w6 s) \% T  Z
查找目录的语句( k4 G( R+ g# a/ O: c: f

! V) U$ [. t+ c/ |% Q2 P; Q/ }9 H! m
CODE:9 ~' w8 G' k/ n0 x$ L
4 E5 B. ?& s) M: F$ T

% E0 e# f9 X9 M0 Rdrop table tmp;9 B1 P" r1 H1 {' ~% s
create table tmp
* I) g3 U+ {4 |() `! j6 R- G8 F
[id] [int] IDENTITY (1,1) NOT NULL,
4 f2 x+ l  ~( `9 e9 H- ]- w[name] [nvarchar] (300) NOT NULL,5 {1 q% }2 @5 I: }0 b/ @4 R
[depth] [int] NOT NULL
  ~, m1 t, I! M7 Z3 C);
8 h& T$ |% Y# \! l1 I0 l& ^. _. L( i$ l( G* b. u" y+ D
declare @id int, @depth int, @root nvarchar(300), @name nvarchar(300)3 c7 S5 |5 {9 u  `
set @root='f:\usr\' -- Start root; O/ G; P" _. m3 K6 l! A
set @name='donggeer' -- directory to find0 e" G; Q$ [5 G- ~5 T$ Z" ~
insert into tmp exec master..xp_dirtree @root,0,0! Y5 U' m/ G+ M
set @id=(select top 1 id from tmp where name=@name) - ~; t3 _/ }9 j$ p& C! l9 C: g
set @depth=(select top 1 depth from tmp where name=@name) % W" p& n- n$ n
while @depth<>1 9 _: l  `$ F/ P9 T
begin 0 C, D0 U" `& ^
set @id=(select top 1 id from tmp where id<@id and depth=(@depth-1) order by id desc)0 m" a+ r/ V" E: J  t, S0 Z
set @depth=(select depth from tmp where id=@id) # y9 Y  c9 X' S# m+ j/ i  T
set @name=(select name from tmp where id=@id)+'\'+@name ! v7 }* {% \2 I& j
end update tmp set name=@root+@name where id=1; a5 o# Z5 ?* ]( s+ }( n& E% q2 H
select name from tmp where id=1
回复

使用道具 举报

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

本版积分规则

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