Làm thế nào bạn đo lường hiệu quả? Cái nào sẽ nhanh hơn? Cái nào sẽ tiêu thụ ít tài nguyên hơn trên mục tiêu? trên nguồn? Có bao nhiêu hàng và loại dữ liệu nào là các cột trong các hàng này? Bạn có chắc chắn có thể thực thi TVF thông qua một máy chủ được liên kết (là mục tiêu SQL 2008 trở lên không?) ? Làm thế nào để bạn đảm bảo di chuyển dữ liệu 1: 1 này nếu bạn lấy từ TVF?
Với những câu hỏi ngoài lề ...
Cập nhật 1
Có vẻ như bạn đang tìm kiếm ETL (Extract-Transform-Load). Tôi muốn giới thiệu SSIS (Dịch vụ tích hợp SQL Server) mà bạn có thể lấy dữ liệu từ nguồn, áp dụng các biến đổi mà bạn cần và sau đó tải chúng vào mục tiêu của mình. Điều này nghe có vẻ như là một gói khá đơn giản (tùy thuộc vào các biến đổi).
Sự khôn ngoan thông thường nói rằng cách tiếp cận máy chủ được liên kết sẽ đi ra liên kết, kéo dữ liệu đến máy chủ cục bộ và sau đó áp dụng bất kỳ logic nào (bộ lọc, tham gia, v.v.) trên máy chủ cục bộ. Có một số chi phí để lấy dữ liệu trên máy chủ được liên kết, nhưng phần lớn quá trình xử lý sẽ được xử lý cục bộ.
Phương thức OPENQUERY sẽ đưa quá trình xử lý lên máy chủ từ xa và "kết quả được lọc" sẽ được máy chủ cục bộ nhận.
Có vẻ như ngay cả khi bạn có thể thực thi TVF thông qua một máy chủ được liên kết, bạn sẽ trở nên tồi tệ nhất của cả hai thế giới, xử lý từ xa và xử lý cục bộ (giả sử bạn có logic bổ sung để áp dụng cho tập hợp).
Tùy thuộc vào cách bạn quyết định tiến lên, tôi cũng sẽ xem xét OPENQUERY
như một phương tiện để nhập / xuất dữ liệu hàng loạt.
Đã nói tất cả về điều đó ...
Nếu cả nguồn và đích tại SQL Server (và đích không phải là phiên bản thấp hơn), tại sao bạn không thực hiện sao lưu và khôi phục dữ liệu? Đây sẽ là một di chuyển dữ liệu thực sự. Đây là một số mã cho bạn.
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;
Bạn có thể tham khảo câu trả lời này về cách sử dụng các mẫu trong SSMS.