Возможно, я опоздал на вечеринку, но это был первый пост, который я увидел, когда искал проблему вставки имени таблицы из 4 частей на связанный сервер. Прочитав это и еще несколько постов, я смог выполнить это, используя EXEC с аргументом "AT" (для SQL2008 +), чтобы запрос выполнялся со связанного сервера. Например, мне пришлось вставить записи 4M в псевдо-временную таблицу на другом сервере, и выполнение инструкции INSERT-SELECT FROM заняло более 10 минут. Но, изменив его на следующий оператор SELECT-INTO, который позволяет использовать имя таблицы из 4 частей в предложении FROM, он делает это всего за несколько секунд (в моем случае - менее 10 секунд).
EXEC ('USE MyDatabase;
BEGIN TRY DROP TABLE TempID3 END TRY BEGIN CATCH END CATCH;
SELECT Field1, Field2, Field3
INTO TempID3
FROM SourceServer.SourceDatabase.dbo.SourceTable;') AT [DestinationServer]
GO
Запрос выполняется на DestinationServer, изменяется на нужную базу данных, гарантирует, что таблица еще не существует, и выбирает из SourceServer. Минимально вошли и без суеты. Возможно, эта информация уже где-то есть, но я надеюсь, что она поможет любому, кто ищет похожие проблемы.