Как вы измеряете эффективность? Какой из них будет быстрее? Какой из них будет потреблять меньше ресурсов на цели? на источнике? Сколько строк и какие типы данных имеют столбцы в этих строках? Вы уверены, что можете выполнить TVF через связанный сервер (целевой SQL 2008 или более поздний?) ? Как вы обеспечиваете миграцию этих данных 1: 1, если вы извлекаете данные из TVF?
С этими вопросами в сторону ...
Обновление 1
Похоже, вы ищете ETL (Extract-Transform-Load). Я бы порекомендовал SSIS (SQL Server Integration Services), с помощью которого вы можете извлекать данные из источника, применять необходимые преобразования, а затем загружать их в свою цель. Похоже, это будет довольно простой пакет (в зависимости от преобразований).
Традиционно считается, что подход с использованием связанного сервера приведет к соединению, доставит данные на локальный сервер и затем применяет любую логику (фильтры, объединения и т. Д.) На локальном сервере. Есть некоторые издержки при получении данных на связанном сервере, но большая часть обработки будет обрабатываться локально.
Метод OPENQUERY поместит обработку на удаленный сервер, и «отфильтрованные результаты» будут получены локальным сервером.
Кажется, что даже если бы вы могли выполнить TVF через связанный сервер, вы бы получили худшее из обоих миров, обрабатывая удаленно и обрабатывая локально (при условии, что у вас есть дополнительная логика для применения на множестве).
В зависимости от того, как вы решите двигаться вперед, я также рассмотрю в OPENQUERY
качестве средства массового импорта / экспорта данных.
Сказав все это ...
Если и источник, и цель на SQL Server (и цель не является более низкой версией), почему бы не выполнить резервное копирование и восстановление данных? Это будет настоящая миграция данных. Вот код для вас.
BACKUP DATABASE <DatabaseName, sysname, DatabaseName>
TO DISK=N'<backup_location, varchar, BackupLocation>.bak'
WITH INIT, FORMAT, COMPRESSION, COPY_ONLY
RESTORE DATABASE <NewDatabaseName, sysname, NewDatabaseName>
FROM DISK = N'<backup_location, varchar, BackupLocation>\
<DatabaseName, sysname, DatabaseName>.bak'
WITH
MOVE '<DataFileName, sysname, DataFileName>' TO '<DataMDFPath, nvarchar(600), DataMDFPath>',
MOVE '<LogFilePath, sysname, LogFilePath>' TO '<LogLDFPath, nvarchar(600), LogLDFPath>',
REPLACE;
Вы можете обратиться к этому ответу о том, как использовать шаблоны в SSMS.