Jak mierzysz wydajność? Który będzie szybszy? Który zużyje mniej zasobów na celu? w źródle? Ile wierszy i jakie typy danych są kolumnami w tych wierszach? Czy na pewno możesz wykonać TVF za pośrednictwem połączonego serwera (czy docelowy SQL 2008 lub nowszy?) ? W jaki sposób zapewniasz migrację tych danych 1: 1, jeśli pobierasz z TVF?
Bez tych pytań ...
Aktualizacja 1
Wygląda na to, że szukasz ETL (Extract-Transform-Load). Polecam SSIS (SQL Server Integration Services), za pomocą którego możesz pobrać dane ze źródła, zastosować potrzebne transformacje, a następnie załadować je do celu. Wygląda na to, że byłby to dość prosty pakiet (w zależności od transformacji).
Konwencjonalna wiedza głosi, że podejście z połączonym serwerem przejdzie do łącza, pobierze dane do serwera lokalnego, a następnie zastosuje dowolną logikę (filtry, sprzężenia itp.) Na serwerze lokalnym. Pobieranie danych na połączonym serwerze wiąże się z pewnym nakładem, ale większość przetwarzania będzie obsługiwana lokalnie.
Metoda OPENQUERY umieści przetwarzanie na serwerze zdalnym, a serwer „odfiltruje wyniki”.
Wygląda na to, że nawet gdybyś mógł uruchomić TVF przez połączony serwer, dostaniesz najgorsze z obu światów, przetwarzając zdalnie i przetwarzając lokalnie (zakładając, że masz dodatkową logikę do zastosowania na zestawie).
W zależności od tego, jak zdecydujesz się iść naprzód, przyjrzę się OPENQUERY
również sposobowi zbiorczego importu / eksportu danych.
Powiedziawszy to wszystko ...
Jeśli zarówno źródło, jak i cel w SQL Server (a celem nie jest wersja niższa), dlaczego nie wykonać kopii zapasowej i przywrócić dane? To byłaby prawdziwa migracja danych. Oto kod dla ciebie.
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;
Możesz odnieść się do tej odpowiedzi na temat korzystania z szablonów w SSMS.