Come stai misurando l'efficienza? Quale sarà più veloce? Quale consumerà meno risorse sull'obiettivo? sulla fonte? Quante righe e che tipo di tipi di dati sono le colonne in queste righe? Sei sicuro di poter eseguire un TVF attraverso un server collegato (è il target SQL 2008 o successivo?) ? Come assicurate una migrazione 1: 1 di questi dati se state estraendo da un TVF?
Con quelle domande fuori dai piedi ...
Aggiornamento 1
Sembra che tu stia cercando ETL (Estrai-Trasforma-Carica). Consiglierei SSIS (SQL Server Integration Services) con il quale è possibile estrarre i dati dall'origine, applicare le trasformazioni necessarie e quindi caricarle nella destinazione. Sembra che sarebbe un pacchetto piuttosto semplice (a seconda delle trasformazioni).
La saggezza convenzionale afferma che l'approccio del server collegato uscirà dal collegamento, estrarrà i dati al server locale e quindi applicherà qualsiasi logica (filtri, join, ecc.) Sul server locale. C'è un sovraccarico per recuperare i dati sul server collegato, ma la maggior parte dell'elaborazione sarà gestita localmente.
Il metodo OPENQUERY inserirà l'elaborazione sul server remoto e i "risultati filtrati" saranno ricevuti dal server locale.
Sembra che anche se tu potessi eseguire un TVF attraverso un server collegato, otterrai il peggio di entrambi i mondi, elaborando in remoto ed elaborando localmente (supponendo che avessi una logica aggiuntiva da applicare sul set).
A seconda di come decidi di andare avanti, esaminerei anche OPENQUERY
come mezzo per importare / esportare dati in blocco.
Detto questo ...
Se sia l'origine che la destinazione su SQL Server (e la destinazione non è una versione precedente), perché non eseguire un backup e un ripristino dei dati? Questa sarebbe una vera migrazione dei dati. Ecco del codice per te.
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;
È possibile fare riferimento a questa risposta su come utilizzare i modelli in SSMS.