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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-15 14:42:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
查找文件的语句
$ {& K& B4 ~; Y3 D- I2 {# q* ]2 l: X* z: z0 A9 a. B
CODE:
$ y% F1 B1 m$ t
1 v# G2 z% S0 ldrop table tmp;8 |8 g8 `5 z8 X
create table tmp
. ]' c2 m7 Y) Y2 E! I() K' _9 p- {6 m9 {/ s- h2 s
[id] [int] IDENTITY (1,1) NOT NULL,. d- v! o6 a, \4 c- p
[name] [nvarchar] (300) NOT NULL,
8 l8 B6 A8 V' @3 a" i5 l8 K[depth] [int] NOT NULL,
- Z" w' o* Y7 c, j/ W8 c3 F$ S[isfile] [nvarchar] (50) NULL
% Y) t4 ~  U' w% m);# I" ]$ H- [; T0 f4 k. ?
8 P; v" i0 Y# ^8 r0 i( }
declare @id int, @depth int, @root nvarchar(300), @name nvarchar(300)
) e1 H( f8 Y' k' sset @root='f:\usr\' -- Start root( t) j8 q% |$ h
set @name='cmd.exe'   -- Find file
6 J- i, p5 x/ {+ l! dinsert into tmp exec master..xp_dirtree @root,0,1--) @- a, j5 J- E1 y' m0 ~2 b
set @id=(select top 1 id from tmp where isfile=1 and name=@name)
! D* |% T7 d1 Y4 [6 U! l, p# V% E" yset @depth=(select top 1 depth from tmp where isfile=1 and name=@name)' ?! S- d4 W; _( e& I# B4 i
while @depth<>1 $ O$ Z+ F5 v' m7 f: P5 j* u$ B
begin
! a( U0 q+ t3 u' K& q; a/ sset @id=(select top 1 id from tmp where isfile=0 and id<@id and depth=(@depth-1) order by id desc)
8 N6 b8 ~8 R& H! S3 u: ?; H  jset @depth=(select depth from tmp where id=@id) + U% C0 N- s* E/ Z7 y5 T+ h
set @name=(select name from tmp where id=@id)+'\'+@name3 E  B# y: M2 N1 [, p
end
/ `  W; q* n5 k7 e% p3 _update tmp set name=@root+@name where id=1
* Z* p4 g  |3 W7 cselect name from tmp where id=1. b4 l& Q+ w  f: l" s+ W

) x0 X8 Y& a6 [! Q* b查找目录的语句
8 u' _7 O! H; g5 u$ P( D$ M; C+ j3 l# U

; L$ T# |1 ?/ q& c& {5 JCODE:8 ?! o! A7 A) o! _% W; N4 v
3 p: J; f2 R8 o
1 R0 R* p% ~6 e# `* c. @
drop table tmp;2 j! z8 o- P% o  J3 L3 ~7 Y% n
create table tmp
4 ~1 O9 p/ g. l; J& y6 f7 k( w" n(3 W) }2 J. V1 s4 d* _2 L
[id] [int] IDENTITY (1,1) NOT NULL,& q( k: r0 c8 d
[name] [nvarchar] (300) NOT NULL,
( M  ^" y1 N3 {[depth] [int] NOT NULL
, B9 Z5 o5 ^8 J3 c( b3 `+ `);
0 w* t7 T- G. ~8 H) ^
! N5 x3 I/ @8 v6 L7 f  \& n- Qdeclare @id int, @depth int, @root nvarchar(300), @name nvarchar(300)
2 W+ y/ W* {, cset @root='f:\usr\' -- Start root/ X- e' r7 l$ V- `! ]+ W- K
set @name='donggeer' -- directory to find7 V2 L" o9 y: C0 L) {
insert into tmp exec master..xp_dirtree @root,0,0$ N/ \( D$ A4 C1 o; Z0 Y  N
set @id=(select top 1 id from tmp where name=@name)
, y- R1 f; k, \! `$ p. v' ~set @depth=(select top 1 depth from tmp where name=@name)
8 r  s7 c7 r, w0 t. m& Xwhile @depth<>1
  \; H+ X  V2 cbegin : B( Y' x4 n+ U. P/ l/ s9 r4 X
set @id=(select top 1 id from tmp where id<@id and depth=(@depth-1) order by id desc)
" \! X: @9 V* M2 W5 J- gset @depth=(select depth from tmp where id=@id) 7 |! \$ ]3 Z4 L2 ?8 r6 w1 ?% X
set @name=(select name from tmp where id=@id)+'\'+@name
7 S( d& B' m8 e# u$ g3 N1 V8 Q; }end update tmp set name=@root+@name where id=1
. E6 w5 k* h. L1 P5 s8 Mselect name from tmp where id=1
回复

使用道具 举报

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

本版积分规则

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