Định dạng có lẽ nên được:
<server>.<database>.<schema>.<table>
Ví dụ: DatabaseServer1.db1.dbo.table1
Cập nhật: Tôi biết đây là một câu hỏi cũ và câu trả lời tôi có chính xác; tuy nhiên, tôi nghĩ rằng bất kỳ ai khác vấp phải điều này nên biết một vài điều.
Cụ thể, khi truy vấn đối với một máy chủ được liên kết trong một tình huống tham gia TOÀN BỘ bảng từ máy chủ liên kết sẽ khả năng được tải lên máy chủ truy vấn được thực hiện từ để làm các hoạt động tham gia. Trong trường hợp của OP, cả hai table1
từ DB1
và table1
từ DB2
sẽ được chuyển toàn bộ đến máy chủ thực hiện truy vấn, có lẽ có tên là DB3
.
Nếu bạn có bảng lớn, có thể dẫn đến hoạt động mất nhiều thời gian để thực thi. Sau khi tất cả nó bây giờ bị hạn chế bởi tốc độ lưu lượng truy cập mạng mà là đơn đặt hàng của cường độ chậm hơn so với bộ nhớ hoặc thậm chí tốc độ truyền đĩa.
Nếu có thể, hãy thực hiện một truy vấn duy nhất đối với máy chủ từ xa mà không cần tham gia vào bảng cục bộ, để lấy dữ liệu bạn cần vào bảng tạm thời. Sau đó truy vấn ra khỏi đó.
Điều đó là không thể, sau đó bạn cần phải xem xét những thứ khác nhau có thể gây ra máy chủ SQL phải tải toàn bộ bảng cục bộ. Ví dụ: sử dụng GETDATE()
hoặc thậm chí một số lần tham gia nhất định. Những kẻ giết người thực hiện khác không đưa ra các quyền thích hợp.
Xem http://thomaslarock.com/2013/05/top-3-performance-killers-for-linked-server-queries/ để biết thêm thông tin.
nếu databas Tên máy chủ có dấu nối, cần bao quanh dấu ngoặc vuông – bmw0128
@ bmw0128: Tốt hơn, hãy sử dụng dấu ngoặc kép: nó được hỗ trợ bởi hầu hết mọi nền tảng, không giống như dấu ngoặc vuông của Microsoft. –
Bạn cũng cần sử dụng dấu ngoặc vuông hoặc dấu ngoặc kép khi tên máy chủ cơ sở dữ liệu có dấu chấm trong đó. –