Wie messen Sie die Effizienz? Welches wird schneller sein? Welches wird weniger Ressourcen auf dem Ziel verbrauchen? an der Quelle? Wie viele Zeilen und welche Datentypen enthalten die Spalten in diesen Zeilen? Sind Sie sicher, dass Sie eine TVF über einen Verbindungsserver ausführen können (ist das Ziel SQL 2008 oder höher?) ? Wie stellen Sie eine 1: 1-Migration dieser Daten sicher, wenn Sie von einem TVF ziehen?
Mit diesen Fragen aus dem Weg ...
Update 1
Es hört sich so an, als würden Sie nach ETL (Extract-Transform-Load) suchen. Ich empfehle SSIS (SQL Server Integration Services), mit dem Sie die Daten aus der Quelle abrufen, die benötigten Transformationen anwenden und diese dann in Ihr Ziel laden können. Das klingt, als wäre es ein ziemlich einfaches Paket (abhängig von den Transformationen).
Herkömmliche Weisheiten besagen, dass der Verbindungsserver-Ansatz die Verbindung beendet, die Daten auf den lokalen Server abruft und dann eine beliebige Logik (Filter, Verknüpfungen usw.) auf den lokalen Server anwendet. Das Abrufen der Daten auf dem Verbindungsserver ist mit einem gewissen Aufwand verbunden, der Großteil der Verarbeitung wird jedoch lokal abgewickelt.
Die OPENQUERY-Methode legt die Verarbeitung auf dem Remote-Server ab und die "gefilterten Ergebnisse" werden vom lokalen Server empfangen.
Selbst wenn Sie eine TVF über einen Verbindungsserver ausführen könnten, würden Sie das Schlimmste aus beiden Welten erleben, wenn Sie remote und lokal verarbeiten (vorausgesetzt, Sie hätten zusätzliche Logik, die auf das Set angewendet werden müsste ).
Abhängig davon, wie Sie sich entscheiden, vorwärts zu gehen, würde ich auch nach OPENQUERY
Möglichkeiten suchen , Import- / Exportdaten zu sammeln.
Davon abgesehen ...
Wenn sowohl die Quelle als auch das Ziel unter SQL Server (und das Ziel keine niedrigere Version ist), warum nicht eine Sicherung und Wiederherstellung der Daten durchführen? Dies wäre eine echte Datenmigration. Hier ist ein Code für dich.
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;
In dieser Antwort erfahren Sie, wie Sie Vorlagen in SSMS verwenden.