Đôi khi vì một lý do gì đó mà bạn phải truy vấn dữ liệu từ một database đặt tại server khác (hoặc một instance khác của SQL Server) – ví dụ: so sánh dữ liệu giữa 2 database, hay các giải pháp phân tán …

Bạn sẽ làm thế nào? Tôi xin giới thiệu với các bạn sử dụng Linked Server để giải quyết vấn đề này.

Trong bài này, tôi giả sử tôi đang ở SQL server 2000 máy local (instance là CHUNGTV\SQL2K), tôi cần lấy dữ liệu của bảng DMKH ở database HungLong để tại SQL Server 2008 trên máy chủ (instance là ServerDB\SQL2008)

Cách 1: Cấu hình bằng giao diện

  • Mở trình quản lý database lên, hiện tôi đang dùng Microsoft SQL Server Management Studio 2008 (10.x); đối với Microsoft SQL Server Management Studio 2005 (9.x) thì làm tương tự, với Microsoft SQL Enterprise Manager 8 (2000) thì có khác một ít tôi sẽ nói sau.

  • Expand thư mục Server Objects, sẽ thấy thư mục Linked Servers

Đối với Microsoft SQL Enterprise Manager 8 (2000) thì phần Linked Servers lại nằm trong phần Security

  • Righ-click lên mục Linked Servers, và chọn New Linked Servers…, màn hình New Linked Server sẽ hiện lên

Tại phần General, bạn nhập các thông tin:

  • Linked server: Tên bạn đặt cho linked server sẽ được truy xuất khi bạn thực hiện truy vấn dữ liệu (ở đây tôi đặt là SERVERDB2K8)
  • Server type: Bạn chọn là Other data source
  • Provider: Chọn Microsoft OLE DB Provider for SQL Server (ở đây bạn có thể chọn loại khác tùy vào nguồn dữ liệu bạn sẽ link tới – có thể là Access, Oracle, Excel …)
  • Product name: đặt tên product (ở đây tôi đặt là Sql2K8)
  • Data source: nhập instance của server bạn muốn link tới (ở đây tôi gõ ServerDB\SQL2008)
  • Các thông tin khác để mặc định.

Tại phần Security:

  • Bạn chọn tùy chọn “Be made using this security context”
  • Nhập user đăng nhập vào SQL tại Remote login:
  • Nhập Password đăng nhập tại With password:

Sau đó bạn nhấn OK

  • Thực hiện truy vấn dữ liệu: bạn chọn New Query và gõ câu truy vấn dữ liệu thử. Ví dụ:
SELECT TOP 100 * FROM SERVERDB2K8.HungLong.dbo.DMKH

Thực hiện bằng lệnh

Tại cửa sổ query, bạn hoàn toàn có thể thực hiện các công việc như bước 1 bằng cách sau:

  • Tạo mới Linked server bằng lệnh sau:
EXEC master.dbo.sp_addlinkedserver @server = N'SERVERDB2K8', @provider=N'SQLOLEDB', @datasrc=N'ServerDB\SQL2008', @srvproduct=N'Sql2K8'
  • Kiểm tra đã tạo thành công chưa bằng:
EXEC sp_linkedservers

kết quả:

  • Đăng nhập vào Linked server
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'SERVERDB2K8', @useself=N'False', @locallogin=NULL, @rmtuser=N'tentruycap', @rmtpassword='matkhautruycap'
  • Kiểm tra kết quả
SELECT TOP 100 * FROM SERVERDB2K8.HungLong.dbo.DMKH

Chúc các bạn thành công.