Định dạng có lẽ phải là:
<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ó là đúng; tuy nhiên, tôi nghĩ bất kỳ ai khác tình cờ gặp phải điều này nên biết một vài điều.
Cụ thể, khi truy vấn 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ủ được liên kết sẽ có khả năng được tải xuống máy chủ mà truy vấn đang thực thi để thực hiện thao tác nối. Trong trường hợp của OP, cả table1
từ DB1
và table1
từ DB2
sẽ được chuyển toàn bộ đến máy chủ thực thi truy vấn, có lẽ được đặt tên là DB3
.
Nếu bạn có các bảng lớn, điều này có thể dẫn đến một hoạt động mất nhiều thời gian để thực thi. Xét cho cùng, giờ đây nó bị hạn chế bởi tốc độ lưu lượng mạng, chậm hơn tốc độ 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ộ, để kéo dữ liệu bạn cần vào bảng tạm thời. Sau đó, truy vấn ra khỏi đó.
Nếu điều đó là không thể thì bạn cần phải xem xét những điều khác nhau có thể khiến 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í nhất định tham gia. Những kẻ giết chết hiệu suất khác bao gồm 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.