回答

收藏

While循环遍历数据库

技术问答 技术问答 594 人阅读 | 0 人回复 | 2023-09-14

我想知道是否有人可以帮助我创建一个while循环来遍历几个数据库,以便从两列的一个表中获取数据。这是我到目前为止所做的。什么都行不通,因为我不知道如何针对我从每个数据库查询的表来使select语句在每个数据库中正常工作(dbo.tbldoc)# n4 z. v6 U: R' m9 o' _9 k
DECLARE @Loop int
; w* i- d/ i" o% ^DECLARE @DBName varchar(300)1 Z' m2 a1 K' A0 w; N
DECLARE @SQL varchar(max)) _0 u- {, Z4 K
DECLARE @tableName VARCHAR(255)
" |& @9 H9 F6 S- K, Q$ B# b1 i) TSET @Loop = 1
3 ^/ c- P. U' x' g8 FSET @DBName = ''+ ?$ x6 s9 J) z, J
   WHILE @Loop = 1
) q. R& I& `6 S. S- h- T; ZBEGIN# }7 N( @3 k$ ?, g: p2 S8 Q2 t2 U
   SELECT [name] FROM sys.databases : c! b' m. C: z8 ]$ S% ^9 l
   WHERE [name] like 'z%' and create_date between '2010-10-17' and '2011-01-15'
% j9 u: @& f+ V4 \   ORDER BY [name]3 F: \. @" R6 N% }+ t1 w3 d4 C9 q
      SET @Loop = @@ROWCOUNT
6 ?! Z3 H' b  E3 m   IF @Loop = 0  q1 k, N: r2 h+ r
      BREAK* S5 ~4 W+ v# h; H( m
   SET @SQL = ('USE ['+ @DBNAME +']')
' y6 P) N% I/ B# _! u1 W( y$ p      IF EXISTS(SELECT [name] FROM sys.tables WHERE name != 'dbo.tbldoc' )
: ]+ ]- N$ d/ k0 Y* q3 O9 ^, t' G                  BEGIN
3 x/ q: u1 i  O               SELECT SUM(PGCOUNT), CREATED FROM **dbo.tbldoc**& x+ U3 w8 O6 ^0 C: a( U
            END
/ J/ e# E: Q& r0 M            ELSE% Y2 v( e8 Q, H0 [
            --BEGIN, C( A( _) C4 \9 r8 e" j: ~) X
               PRINT 'ErrorLog'
; O0 t4 e+ S9 v: L! y2 y            END6 f* Z" B, k' _, D6 m
                . h3 ?/ v* S% M- f( {6 c- i: W
解决方案:$ a4 ~' Q" [8 \+ q/ A1 q5 C" Z1 u2 i# i
               
/ ?, h) U% C* z7 w- k0 N- k. s+ ~& o/ S( x1 u* q6 K
$ |+ v4 Y% c9 R: j, L. F0 c
                我会考虑使用sp_MSForEachDB,这要容易得多…6 M  D" _! y/ Q/ Z. p
编辑:- v) n0 [4 V: M& N9 l! ~$ L6 z- g
EXEC sp_MSForEachDB 'USE [?]; IF DB_NAME() LIKE ''Z%%''9 o& J" f1 V! p% }+ g7 L
BEGIN
$ t; d4 s. f, T0 [4 L- M* n5 ^2 a7 z. W: Q( x+ D0 o
END
$ p) U9 ?* X3 x! {9 m'
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则