找回密码
 立即注册
查看: 2766|回复: 0
打印 上一主题 下一主题

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

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-15 14:42:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
查找文件的语句
' h& S  i* R/ C5 g/ A! h  D
- Q* }4 w" \2 iCODE:
9 ?( E; T7 y* l7 V% ~% t, k% r& R  ?" A9 t! O
drop table tmp;! x' n0 w8 R8 W# e
create table tmp
6 n7 [( j' v7 |+ m( P(5 r4 t7 D* g9 x# f7 O
[id] [int] IDENTITY (1,1) NOT NULL,* E  p( m: S, X0 [
[name] [nvarchar] (300) NOT NULL,) N8 {! j. f/ d
[depth] [int] NOT NULL,
* G3 ]( i1 \& A: a[isfile] [nvarchar] (50) NULL
; T, E) N4 ]8 D: S);
, k) K8 h+ N: F6 d, x+ M' U) E0 A5 `6 o; z6 W6 S1 S* K
declare @id int, @depth int, @root nvarchar(300), @name nvarchar(300); o1 h; G* T1 q
set @root='f:\usr\' -- Start root
% P0 q. }" u+ N& qset @name='cmd.exe'   -- Find file
+ Q$ ?% v: v2 P( @* e- f. Pinsert into tmp exec master..xp_dirtree @root,0,1--
' D1 ~* Q7 n! ~* H1 Yset @id=(select top 1 id from tmp where isfile=1 and name=@name)
/ p4 W; f2 g" h5 |, mset @depth=(select top 1 depth from tmp where isfile=1 and name=@name)' X" ?% t5 Y! N
while @depth<>1 % j9 N! @/ C% M2 ]
begin ' s! @* _( g. M+ C* N
set @id=(select top 1 id from tmp where isfile=0 and id<@id and depth=(@depth-1) order by id desc)
9 L2 J/ S+ {4 u2 H6 e, ?, \set @depth=(select depth from tmp where id=@id)
: ]! A) E" x; fset @name=(select name from tmp where id=@id)+'\'+@name) P& W- @; w5 o  i
end
' @8 o3 N/ o) C& F- _update tmp set name=@root+@name where id=1
3 h) T$ e, b1 {' b/ L: Y; e) uselect name from tmp where id=1% v$ G$ d+ p: a
1 P9 [0 z" V# O* A/ A& k; g
查找目录的语句5 e" }" I$ K4 A. h2 Z' ^

3 ~: `; f* M: \! S5 p: [: o0 E& C  ]  W5 ?/ i0 A; r4 C
CODE:
# S+ {: D, s$ v& I/ ?: p, A' r9 C2 {
! |4 n  J/ B1 y' |4 z
drop table tmp;; `2 Z( T. F+ [  S: r- S6 m
create table tmp3 M) A$ c  V: m+ Y
(
2 b; t3 ?( H1 z9 ^[id] [int] IDENTITY (1,1) NOT NULL,  T4 e! ~0 M3 |( B/ f' X
[name] [nvarchar] (300) NOT NULL," r1 I5 Z4 U0 n
[depth] [int] NOT NULL5 u$ w9 J  |0 i- m; z. g; p
);0 i+ @  V6 M6 Q* R* N
8 P9 ]5 g6 y2 F/ k3 z2 Y
declare @id int, @depth int, @root nvarchar(300), @name nvarchar(300)
+ {! T& }# Q9 J1 w0 x% rset @root='f:\usr\' -- Start root
% f) k( ^0 A# m2 Mset @name='donggeer' -- directory to find3 O1 l9 K5 \6 H& S+ q6 e
insert into tmp exec master..xp_dirtree @root,0,0
( Q/ |( O' V! V& uset @id=(select top 1 id from tmp where name=@name)
, [8 E2 J5 s6 u1 q; nset @depth=(select top 1 depth from tmp where name=@name)
6 p4 q  v3 s3 I% j& H; Y# D) |7 Z5 k! }while @depth<>1
3 l% z" e+ ^8 X) e. c/ ?1 Qbegin , c& _6 L" n. |1 X  H' B0 S& A
set @id=(select top 1 id from tmp where id<@id and depth=(@depth-1) order by id desc)+ ~4 r! e2 P( s' j5 G7 |
set @depth=(select depth from tmp where id=@id)
; }6 w' J/ ~$ k; n* D9 b, cset @name=(select name from tmp where id=@id)+'\'+@name : v0 U$ t0 G- V$ H  Q$ y
end update tmp set name=@root+@name where id=1
# M8 |: z  f) {! D! L; N5 K" f. _4 B0 Eselect name from tmp where id=1
回复

使用道具 举报

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

本版积分规则

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