Bagaimana Anda mengukur efisiensi? Yang mana yang lebih cepat? Mana yang akan mengkonsumsi lebih sedikit sumber daya pada target? pada sumbernya? Berapa banyak baris dan tipe data apa yang merupakan kolom dalam baris ini? Apakah Anda yakin dapat menjalankan TVF melalui server yang ditautkan (apakah target SQL 2008 atau yang lebih baru?) ? Bagaimana Anda memastikan migrasi 1: 1 dari data ini jika Anda menarik dari TVF?
Dengan pertanyaan-pertanyaan itu ...
Perbarui 1
Sepertinya Anda sedang mencari ETL (Extract-Transform-Load). Saya akan merekomendasikan SSIS (SQL Server Integration Services) yang dengannya Anda dapat menarik data dari sumber, menerapkan transformasi yang Anda butuhkan, dan kemudian memuatnya ke dalam target Anda. Ini terdengar seperti paket yang cukup mudah (tergantung pada transformasi).
Kearifan konvensional menyatakan bahwa pendekatan server tertaut akan keluar ke tautan, tarik data ke server lokal, dan kemudian menerapkan logika apa pun (filter, bergabung, dll.) Di server lokal. Ada beberapa overhead untuk mengambil data pada server yang ditautkan, tetapi sebagian besar pemrosesan akan ditangani secara lokal.
Metode OPENQUERY akan menempatkan pemrosesan pada server jarak jauh dan "hasil yang difilter" akan diterima oleh server lokal.
Sepertinya bahkan jika Anda bisa mengeksekusi TVF melalui server yang terhubung, Anda akan mendapatkan yang terburuk dari kedua dunia, memproses dari jarak jauh dan memproses secara lokal (dengan asumsi Anda memiliki logika tambahan untuk diterapkan pada set tersebut).
Bergantung pada bagaimana Anda memutuskan untuk bergerak maju, saya juga akan melihat OPENQUERY
sebagai alat untuk mengimpor / mengekspor data massal.
Setelah mengatakan semua itu ...
Jika sumber dan target di SQL Server (dan target bukan versi yang lebih rendah), mengapa tidak melakukan pencadangan dan pengembalian data? Ini akan menjadi migrasi data yang benar. Ini beberapa kode untuk Anda.
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;
Anda bisa merujuk ke jawaban ini tentang cara menggunakan templat di SSMS.