Форматът вероятно трябва да бъде:
<server>.<database>.<schema>.<table>
Например:DatabaseServer1.db1.dbo.table1
Актуализиране :Знам, че това е стар въпрос и отговорът, който имам, е правилен; обаче мисля, че всеки друг, който се натъкне на това, трябва да знае няколко неща.
А именно, при запитване към свързан сървър в ситуация на присъединяване ЦЯЛОТО таблица от свързания сървър вероятно да бъдат изтеглени на сървъра, от който се изпълнява заявката, за да се извърши операцията за присъединяване. В случая на ОП и двете table1
от DB1
и table1
от DB2
ще бъдат прехвърлени в тяхната цялост на сървъра, изпълняващ заявката, вероятно с име DB3
.
Ако имате големи маси, товаможе води до операция, която отнема много време за изпълнение. В края на краищата той вече е ограничен от скоростите на мрежовия трафик, които са с порядък по-бавни от скоростите на пренос на паметта или дори на диска.
Ако е възможно, извършете единична заявка към отдалечения сървър, без да се присъединявате към локална таблица, за да изтеглите необходимите ви данни във временна таблица. След това изключете това.
Ако това не е възможно, тогава трябва да разгледате различните неща, които биха накарали SQL сървъра да зареди цялата таблица локално. Например с помощта на GETDATE()
или дори определени съединения. Други убийци на представянето включват недаване на подходящи права.
Вижте http://thomaslarock.com/2013/05/top-3-performance-killers-for-linked-server-queries/ за още информация.