Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Truy vấn dữ liệu bằng cách kết hợp hai bảng trong hai cơ sở dữ liệu trên các máy chủ khác nhau

Bạn sẽ cần sử dụng sp_addlinkedserver để tạo liên kết máy chủ. Xem tài liệu tham khảo để sử dụng. Khi liên kết máy chủ được thiết lập, bạn sẽ tạo truy vấn như bình thường, chỉ cần thêm tiền tố vào tên cơ sở dữ liệu với máy chủ khác. I.E:

-- FROM DB1
SELECT *
FROM [MyDatabaseOnDB1].[dbo].[MyTable] tab1
    INNER JOIN [DB2].[MyDatabaseOnDB2].[dbo].[MyOtherTable] tab2
        ON tab1.ID = tab2.ID

Sau khi liên kết được thiết lập, bạn cũng có thể sử dụng OPENQUERY để thực thi một câu lệnh SQL trên máy chủ từ xa và chỉ chuyển dữ liệu trở lại cho bạn. Điều này có thể nhanh hơn một chút và nó sẽ cho phép máy chủ từ xa tối ưu hóa truy vấn của bạn. Nếu bạn lưu dữ liệu vào bộ nhớ cache trong bảng tạm thời (hoặc trong bộ nhớ) trên DB1 trong ví dụ trên, bạn sẽ có thể truy vấn nó giống như tham gia một bảng tiêu chuẩn. Ví dụ:

-- Fetch data from the other database server
SELECT *
INTO #myTempTable
FROM OPENQUERY([DB2], 'SELECT * FROM [MyDatabaseOnDB2].[dbo].[MyOtherTable]')

-- Now I can join my temp table to see the data
SELECT * FROM [MyDatabaseOnDB1].[dbo].[MyTable] tab1
    INNER JOIN #myTempTable tab2 ON tab1.ID = tab2.ID

Kiểm tra tài liệu cho OPENQUERY để xem thêm một số ví dụ. Ví dụ trên là khá giả. Tôi chắc chắn sẽ sử dụng phương pháp đầu tiên trong ví dụ cụ thể này, nhưng tùy chọn thứ hai sử dụng OPENQUERY có thể tiết kiệm thời gian và hiệu suất nếu bạn sử dụng truy vấn để lọc ra một số dữ liệu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để tách một chuỗi để tôi có thể truy cập mục x?

  2. Giới hạn đối với điều kiện WHERE col IN (...)

  3. Máy chủ SQL chọn các hàng riêng biệt chỉ sử dụng giá trị gần đây nhất

  4. SQL Server Internals:Các toán tử có vấn đề Pt. III - Các loại

  5. Cách chuyển đổi chữ thường thành chữ hoa trong SQL Server - UPPER ()