2013-12-16 66 views
15

在我寻找应对以下情况的一种方式:查询在多个数据库同一台服务器

  1. 我们有它的多个数据库的数据库服务器(都具有相同的架构,不同的数据) 。

  2. 我们正在寻找一种方法来查询所有的数据库(并且因为它易于配置,因为可以随时添加更多的数据库)。该数据访问必须是实时的。

说,作为一个例子,你有一个插入命令的应用程序 - 每个应用程序都有自己的DB等什么,然后我们正在寻找的是一个单一的应用程序,然后访问该订单信息的有效途径所有其他数据库,以查询它,并随后采取行动。

我迄今为止的搜索没有透露很多,但我想我可能只是为了找到正确的信息缺少适当的关键字...

+0

您可能想看看Service Broker – Sergio

+0

您想使用哪种语言?使用PHP,您可以独立连接到每个数据库 – Manolo

+0

@ManoloSalsas - 我正在运行一个查询来从每个数据库中获取数据。寻找最干净的方式来做到这一点。独立访问每个数据库不起作用。 – Paddy

回答

9

这不会是有史以来最干净的解决方案,但你可以定义一个“主数据库”上一个视图(如果您的个人数据库不会保持不变),其中包括来自各个数据库的数据,并允许您在单个源上执行查询。

例如...

CREATE VIEW vCombinedRecords AS 
SELECT * FROM DB1.dbo.MyTable 
UNION ALL 
SELECT * FROM DB2.dbo.MyTable 

它允许你这样做......

SELECT * FROM vCombinedRecords WHERE.... 

当你的数据库的变化,您只需更新视图定义,以包括新表。

+1

请记住这是好的,但它会带来一些维护头痛(增加新的数据库),我也会开始担心性能(可能在这里谈论数百个工会)。 – Paddy

+1

我不相信你会找到一个高性能,易于维护的解决方案来搜索多个数据库。索引用于任何高性能,并且只存在于数据库级别。 – Richard

15

您必须在任何数据库对象之前,指定数据库名称。

单个数据库:

SELECT * FROM [dbo].[myTable] 

多dabases:

SELECT * FROM [DB01].[dbo].[myTable] 
UNION ALL 
SELECT * FROM [DB02].[dbo].[myTable] 
UNION ALL 
SELECT * FROM [DB03].[dbo].[myTable] 
+0

感谢您的回答,我知道三部分的语法和如何查询各个数据库,我只是希望比这样的多个工会略微更优雅的方式。 – Paddy

+0

没有通用的内置方式,如何在多个数据库上执行一个脚本。您可以使用存储过程在一个大型SQL选择中动态地串联字符串,然后使用sp_sqlexec执行i。 – TcKs

3

您可以动态地建立工会:

select name from sys.databases 

,然后检查是否有数据库表:

select name from [dbname_from_above].sys.tables where name = 'YourTable' 

这使你的工会所有数据库。您可以构建查询客户端或动态SQL。

+0

有趣的方法,但我仍然有一些关于可伸缩性的问题。 – Paddy

相关问题