2013-12-16 16 views
15

Tôi đang tìm kiếm một cách để đối phó với các tình huống sau đây:Query trên nhiều cơ sở dữ liệu trên cùng một máy chủ

  1. Chúng tôi có một máy chủ cơ sở dữ liệu với nhiều cơ sở dữ liệu trên đó (tất cả đều có cùng một giản đồ, dữ liệu khác nhau) .

  2. Chúng tôi đang tìm cách truy vấn trên tất cả các cơ sở dữ liệu (và để dễ cấu hình, vì có thể thêm nhiều cơ sở dữ liệu bất kỳ lúc nào). Quyền truy cập dữ liệu này phải là thời gian thực.

Ví dụ: bạn có ứng dụng chèn đơn đặt hàng - mỗi ứng dụng có DB riêng của mình, v.v ... chúng tôi đang tìm kiếm một cách hiệu quả để ứng dụng đơn lẻ truy cập thông tin đơn hàng tất cả các cơ sở dữ liệu khác để truy vấn nó và sau đó hành động nó.

tìm kiếm của tôi cho đến nay đã không được tiết lộ rất nhiều, tuy nhiên tôi nghĩ rằng tôi chỉ có thể bị thiếu các từ khóa thích hợp để tìm ra những thông tin chính xác ...

+0

Bạn có thể muốn xem xét Nhà môi giới dịch vụ – Sergio

+0

Ngôn ngữ nào bạn muốn sử dụng? Với PHP, bạn có thể kết nối với từng cơ sở dữ liệu độc lập – Manolo

+0

@ManoloSalsas - Tôi đang tìm cách chạy một truy vấn đơn lẻ để lấy dữ liệu từ mỗi DB. Tìm kiếm cách làm sạch nhất. Việc truy cập mỗi DB một cách độc lập sẽ không hoạt động. – Paddy

Trả lời

9

Nó sẽ không thể là giải pháp sạch nhất bao giờ hết, nhưng bạn có thể xác định một cái nhìn về một "cơ sở dữ liệu Master" (nếu cá nhân của bạn cơ sở dữ liệu sẽ không liên tục) bao gồm dữ liệu từ các cơ sở dữ liệu riêng lẻ và cho phép bạn thực hiện các truy vấn trên một nguồn duy nhất.

Ví dụ ...

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

nào cho phép bạn để làm ...

SELECT * FROM vCombinedRecords WHERE.... 

Khi cơ sở dữ liệu của bạn thay đổi, bạn chỉ cần cập nhật các định nghĩa khung nhìn để bao gồm các bảng mới.

+1

Có điều này trong tâm trí alright, nhưng nó là một chút của một nhức đầu bảo trì (thêm cơ sở dữ liệu mới) và tôi cũng sẽ bắt đầu lo lắng về hiệu suất (có khả năng nói về hàng trăm công đoàn ở đây). – Paddy

+1

Tôi không tin rằng bạn sẽ tìm thấy giải pháp hiệu suất cao, dễ bảo trì để tìm kiếm trên nhiều cơ sở dữ liệu. Các chỉ mục được sử dụng cho bất kỳ thứ gì có hiệu suất cao, và chúng chỉ tồn tại ở cấp cơ sở dữ liệu. – Richard

15

Bạn phải ghi rõ tên cơ sở dữ liệu trước khi bất kỳ đối tượng cơ sở dữ liệu.

cơ sở dữ liệu đơn:

SELECT * FROM [dbo].[myTable] 

Nhiều dabases:

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

Cảm ơn câu trả lời, tôi biết cú pháp ba phần và cách truy vấn qua các DB riêng lẻ, tôi chỉ hy vọng một cách thanh lịch hơn nhiều so với nhiều công đoàn như thế này. – Paddy

+0

Không có cách tích hợp sẵn, cách thực hiện một tập lệnh trên nhiều cơ sở dữ liệu. Bạn có thể có thủ tục lưu trữ sẽ tự động đồng bộ chuỗi trong một SQL lớn chọn và sau đó thực hiện i với sp_sqlexec. – TcKs

3

Bạn có thể xây dựng các công đoàn tự động:

select name from sys.databases 

và sau đó kiểm tra xem cơ sở dữ liệu có bảng:

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

Cung cấp cho bạn tất cả các cơ sở dữ liệu cho các công đoàn. Bạn có thể xây dựng phía máy khách truy vấn hoặc trong SQL động.

+0

Cách tiếp cận thú vị, nhưng tôi vẫn có một số lo ngại về khả năng mở rộng. – Paddy

Các vấn đề liên quan