循环迭代通过数据库

Jef*_*eff 10 sql sql-server

我想知道是否有人可以帮助我创建一个while循环来迭代几个数据库以从两列中的一个表中获取数据.这是我到目前为止所做的.什么都行不通,因为我不知道如何让select语句通过每个数据库工作,关于我从每个数据库查询的表(dbo.tbldoc)

DECLARE @Loop int
DECLARE @DBName varchar(300)
DECLARE @SQL varchar(max)
DECLARE @tableName VARCHAR(255)

SET @Loop = 1
SET @DBName = ''

   WHILE @Loop = 1
BEGIN

   SELECT [name] FROM sys.databases 
   WHERE [name] like 'z%' and create_date between '2010-10-17' and '2011-01-15'
   ORDER BY [name]

      SET @Loop = @@ROWCOUNT

   IF @Loop = 0
      BREAK

   SET @SQL = ('USE ['+ @DBNAME +']')
      IF EXISTS(SELECT [name] FROM sys.tables WHERE name != 'dbo.tbldoc' )
                  BEGIN
               SELECT SUM(PGCOUNT), CREATED FROM **dbo.tbldoc**
            END
            ELSE
            --BEGIN
               PRINT 'ErrorLog'
            END 
Run Code Online (Sandbox Code Playgroud)

gbn*_*gbn 30

我会考虑更容易sp_MSForEachDB ...

编辑:

sp_MSForEachDB 'IF DB_NAME LIKE ''Z%%''
BEGIN


END
'
Run Code Online (Sandbox Code Playgroud)

  • 这个(和类似的sp_MSForEachTable)工作得非常好,但请记住,命令块中有128个字符的限制. (4认同)
  • 过滤器(如 Z)将不起作用,因为 DB_NAME() 将始终返回“master”。你需要事先调用`USE ?`。例如:`sp_MSForEachDB'使用?打印 db_name()'`。 (2认同)