Đị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ĩ rằng 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 tình huống tham gia, bảng TOÀN BỘ từ máy chủ được liên kết có thể sẽ được tải xuống máy chủ mà truy vấn đang thực thi từ đó để thực hiện thao tác kết hợp. 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 hiện truy vấn, có lẽ được đặt tên 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 độ truyền của bộ nhớ hoặc thậm chí là tốc độ đĩ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, không 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 thứ 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í một số phép nối nhất định. Những kẻ giế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.