2013-04-19 2 views
0

После поиска в Google и регистрации в MS documenation (http://msdn.microsoft.com/en-us/library/ms188279.aspx) на связанных серверах я все еще не мог получить ясный ответ на следующий вопрос. Я думаю об объединении двух SQL-серверов, поэтому я могу создать подмножество данных из исходного БД и вставить его в выходной БД (с повторными проверками перед вставкой), но я не знаю, как MSSQL обрабатывает запросы, которые используют связанные базы данных.Всегда ли MSSQL копирует таблицы при использовании Linked Server

Насколько я знаю, следующий запрос приведет к LocalServer загрузке FarAwayTable, а затем выполнение запроса на местном уровне (который убивает для исполнения в моем случае):

SELECT 
    f.* 
FROM 
    FarAwayServer.FarAwayDB.dbo.FarAwayTable f, 
    LocalServer.LocalDb.dbo.LocalTable l 
WHERE 
    f.ID = l.ID 

Мой вопрос, будет MSSQL делать то же самое для следующего запроса или будет только загрузить результат (исполняющий весь запрос на FarAwayServer):

SELECT 
    * 
FROM 
    FarAwayServer.FarAwayDB.dbo.FarAwayTable f 
WHERE 
    f.ID = 1 

ответ

1

это будет по-прежнему действовать одинаково (таблица FarAwayTable будет загружена и т он будет выполняться локально). Если вы хотите, чтобы выполнить запрос на FarAwayServer вы должны использовать OPENQUERY:

SELECT * FROM OPENQUERY([FarAwayServer], 'SELECT * FROM FarAwayDB.dbo.FarAwayTable f WHERE f.ID = 1') 
+0

Спасибо, догадывался я должен буду писать запросы без параметров (OPENQUERY/OpenRowset);). – Rob

+0

@Rob Верьте мне, я знаю боль, также вам нужно быть особенно осторожным в отношении безопасности, чтобы избежать инъекций. – tpeczek

+0

Ну, по крайней мере, вставки могут быть написаны без OPENQUERY :) – Rob