您如何衡量效率?哪一个会更快?哪一个将消耗较少的目标资源?在源头上?这些行中的列有多少行和什么样的数据类型?您确定可以通过链接服务器执行TVF (目标SQL 2008或更高版本吗?)?如果您是从TVF提取数据,如何确保该数据按1:1迁移?
有了这些问题,...
更新1
听起来您在寻找ETL(Extract-Transform-Load)。我建议使用SSIS(SQL Server集成服务),您可以使用它从源中提取数据,应用所需的转换,然后将其加载到目标中。听起来这将是一个非常简单的程序包(取决于转换)。
传统观点认为,链接服务器方法将使用链接,将数据提取到本地服务器,然后在本地服务器上应用任何逻辑(过滤器,联接等)。在链接服务器上获取数据会有一些开销,但是大部分处理将在本地进行。
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中使用模板。