Comment mesurez-vous l'efficacité? Lequel sera le plus rapide? Lequel consommera le moins de ressources sur la cible? sur la source? Combien de lignes et quel type de types de données sont les colonnes dans ces lignes? Êtes-vous sûr de pouvoir exécuter un fichier TVF via un serveur lié (la cible est-elle SQL 2008 ou ultérieure?) ? Comment assurez-vous une migration 1: 1 de ces données si vous extrayez d'un fichier TVF?
Avec ces questions sur le chemin ...
Mise à jour 1
On dirait que vous recherchez ETL (Extract-Transform-Load). Je recommande SSIS (SQL Server Integration Services) avec lequel vous pouvez extraire les données de la source, appliquer les transformations dont vous avez besoin, puis les charger dans votre cible. Cela ressemble à un package assez simple (en fonction des transformations).
Selon la sagesse conventionnelle, l'approche du serveur lié ira au lien, extraira les données au serveur local, puis appliquera toute logique (filtres, jointures, etc.) au serveur local. Il y a une surcharge à récupérer les données sur le serveur lié, mais la majorité du traitement sera traitée localement.
La méthode OPENQUERY mettra le traitement sur le serveur distant et les "résultats filtrés" seront reçus par le serveur local.
Il semble que même si vous pouviez exécuter un fichier TVF via un serveur lié, vous auriez le pire des deux mondes, le traitement à distance et le traitement local (en supposant que vous disposiez d'une logique supplémentaire à appliquer sur le plateau).
En fonction de la manière dont vous décidez d'aller de l'avant, j'aimerais également examiner OPENQUERY
un moyen d'importer / exporter en masse les données.
Ayant dit tout cela ...
Si la source et la cible sur SQL Server (et la cible n'est pas une version inférieure), pourquoi ne pas effectuer une sauvegarde et une restauration des données? Ce serait une véritable migration de données. Voici du code pour vous.
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;
Vous pouvez vous référer à cette réponse pour savoir comment utiliser les modèles dans SSMS.