¿Cómo estás midiendo la eficiencia? ¿Cuál será más rápido? ¿Cuál consumirá menos recursos en el objetivo? en la fuente? ¿Cuántas filas y qué tipo de tipos de datos son las columnas en estas filas? ¿Está seguro de que puede ejecutar un TVF a través de un servidor vinculado (es el objetivo de SQL 2008 o posterior) ? ¿Cómo está asegurando una migración 1: 1 de estos datos si está extrayendo de un TVF?
Con esas preguntas fuera del camino ...
Actualización 1
Parece que estás buscando ETL (Extract-Transform-Load). Recomiendo SSIS (SQL Server Integration Services) con el que puede extraer los datos de la fuente, aplicar las transformaciones que necesita y luego cargarlas en su destino. Esto suena como si fuera un paquete bastante sencillo (dependiendo de las transformaciones).
La sabiduría convencional establece que el enfoque del servidor vinculado saldrá al enlace, extraerá los datos al servidor local y luego aplicará cualquier lógica (filtros, uniones, etc.) en el servidor local. Hay algunos gastos generales para recuperar los datos en el servidor vinculado, pero la mayoría del procesamiento se manejará localmente.
El método OPENQUERY colocará el procesamiento en el servidor remoto y el servidor local recibirá los "resultados filtrados".
Parece que incluso si pudiera ejecutar un TVF a través de un servidor vinculado, estaría obteniendo lo peor de ambos mundos, procesando de forma remota y procesando localmente (suponiendo que tuviera una lógica adicional para aplicar en el conjunto).
Dependiendo de cómo decidas seguir adelante, también examinaría OPENQUERY
como un medio para importar / exportar datos en masa.
Habiendo dicho todo eso ...
Si tanto el origen como el destino en SQL Server (y el destino no es una versión inferior), ¿por qué no hacer una copia de seguridad y restauración de los datos? Esta sería una verdadera migración de datos. Aquí hay un código para ti.
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;
Puede consultar esta respuesta sobre cómo usar plantillas en SSMS.