列出的数据库中的SQL循环选择查询

时间:2017-05-15 06:17:40

标签: sql sql-server tsql

我在数据库通用中有一个名为 databaselist 的表。 此表包含我要选择的同一实例上的所有数据库名称。每个数据库都有一个名为 customermaster 的表。

我想在所有列出的数据库上循环SELECT查询并返回一个结果。例如,我想获得在通用数据库的 databaselist 表中列出的所有数据库中city = "chicago"的客户列表。

2 个答案:

答案 0 :(得分:0)

如果您使用sql server,则可以执行此操作:

DECLARE @sql VARCHAR(MAX) = (SELECT STUFF(
                                (SELECT CONCAT(' UNION ALL ','SELECT * FROM ',
                                                dbName, '..customermaster ')
                                 FROM databaselist FOR XML PATH ('')), 1, 10, ''))

EXEC(@sql)

dbName是您的具有数据库名称的列。

  • 前提是表结构相同。

答案 1 :(得分:0)

回答

创建表脚本

CREATE TABLE [dbo].[databaselist]
(
    [DatabaseName] [varchar](100)
) 

插入脚本

Insert into [databaselist]([DatabaseName])
Select 'Database_1' union 
Select 'Database_2' union 
Select 'Database_3' union 
Select 'Database_4' union 
Select 'Database_5' 

准备脚本

Declare @City varchar(100)
Set @City='chicago'
decLare @id varchar(8000)
SELECT @id =  COALESCE( @ID + '    union ' ,'  '  )
 +'select * from '+
CAST(DatabaseName AS VARCHAR(5000))+'.dbo.customermaster where city =''' +@City+''''
FROM databaselist 

Print @id 

Exec (@id)

假设

  1. customermaster表在所有数据库中具有相同的结构。
  2. 所有表都使用dbo架构。