Я пытаюсь скопировать данные из одной таблицы на SQL Server 2012 в другую таблицу на удаленном сервере (Azure)
Azure добавлен как связанный сервер в SQL Server 2012.
Я создаю операторы XML для вставок, а затем выполняю эти операторы на удаленном сервере, как указано ниже.
DECLARE @xml XML
SET @xml = (
SELECT 'insert into Table_on_Azure values (' + convert(varchar(300),isnull(ID, 'NULL')) + ',' + convert(varchar(300),isnull(ST_ID, 'NULL')) + ',' ..... etc etc ...');'
FROM local_table
FOR XML path('')
)
DECLARE @sql AS VARCHAR(max)
SET @sql = 'set nocount on;' + cast(@xml AS VARCHAR(max)) + 'set nocount off;' --Converts XML back to a long string
EXEC ('select * from remote_table_2') AT Linked_Azure_Server -- To confirm that the Linked Server is working fine and yes I do get results from this.
EXEC ('use myRemoteDB;' + @sql ) AT Linked_Azure_Server
Причина, по которой я это делаю, такова: «В локальной таблице около 1 миллиона записей, и мне потребовалось более 3 часов, чтобы передать данные на связанный сервер. Затем я нашел этот ответ Производительность вставки-выбора связанного сервера, в котором было предложено создавать операторы вставки XML и выполнять их на удаленном сервере.
Но когда я делаю это, я получаю ошибку ниже
OLE DB provider "SQLNCLI11" for linked server "Linked_Azure_Server" returned message "Communication link failure".
TCP Provider: The specified network name is no longer available.
Я уверен, что ссылка на Linked_Server в порядке. Для перекрестной проверки я написал этот оператор EXEC ('select * from remote_table_2') AT Linked_Azure_Server
непосредственно перед вставкой записей, и я действительно получаю от этого результаты.
Я проверил другие ответы на аналогичные вопросы, связанные с Communication Link Failure
, но никто не помог.