Ich habe festgestellt, dass BCP effektiver ist als einige der Tools zum Abrufen von Daten in eine frühere Version von SQL Server und zum Abrufen von Daten aus RDS. (Danke @ivan_posdeev.)
Ich erstelle das Schema, indem ich mit der rechten Maustaste auf die Datenbank in SQL Server Management Studio, Aufgaben, Skripten erstellen klicke. Kreuzen Sie alle Objekte an, stellen Sie in erweiterten Objekten sicher, dass alle erforderlichen Skripte (Statistiken, Indizes usw.) erstellt werden. Deaktivieren Sie "Datenbank VERWENDEN", wenn Ihre Zieldatenbank einen anderen Namen hat, und erstellen Sie eine Datei, die Ihr Schema erstellt. Erstellen Sie eine Datenbank auf Ihrem Ziel und führen Sie diese Datei darauf aus (mit osql,sqlcmd oder die GUI).
Führen Sie zum Verschieben der Daten die folgende Abfrage in der Quellendatenbank zweimal aus. Kommentieren Sie zuerst die zweite Spalte, um die Stapeldatei zum Extrahieren von Daten zu generieren, und kommentieren Sie dann die erste Spalte, um die auf Ihrem Ziel auszuführende Importstapeldatei zu generieren. (Sie müssen Ihre Quell- und Zielserver, Instanznamen, Ausgabe- und Eingabedateiverzeichnisse, Benutzernamen und Kennwörter hinzufügen. Um die integrierte Sicherheit zu verwenden, ersetzen Sie die Optionen und durch .)-U-P-T
Dies unterstützt Unicode. Wenn Sie dies nicht benötigen, ändern Sie den -NSchalter in beiden Anweisungen auf -n.
SELECT
'bcp SOURCEDATABASE.' + s.Name + '.' + t.NAME + ' out d:\dbdump\' + s.Name + '.' + t.NAME + '.dat -N -S SOURCESERVER\INSTANCE -UUSER -PPASSWORD'
-- 'bcp DESTINATIONDATASE.' + s.Name + '.' + t.NAME + ' in d:\dbdump\' + s.Name + '.' + t.NAME + '.dat -N -S DESTINATIONSERVER\INSTANCE -UUSER -PPASSWORD -E -h TABLOCK -b 1000 -e d:\dbdump\' + s.Name + '.' + t.NAME + '.ERRORS.dat'
FROM
sys.tables t
INNER JOIN
sys.indexes i ON t.OBJECT_ID = i.object_id
LEFT OUTER JOIN
sys.schemas s ON t.schema_id = s.schema_id
ORDER BY
s.Name, t.NAME
Nach dem Ausführen werden die Prüfdateien mit dem Namen schema.tabellenname.ERRORS.dat - alle fehlgeschlagenen Zeilen einbezogen. Leer, wenn keine vorhanden sind.
Hier finden Sie eine MSDN-Referenz für BCP. Hier erfahren Sie mehr über die BCP-Optionen .
Ich habe festgestellt, dass dies der Erstellung von Skripten und den von mir ausprobierten Tools weit überlegen ist. Es kann auch auf RDS-Datenbanken ausgeführt werden (die keine Sicherungen zulassen). Die generierten Datendateien haben 30% der Größe der SQL-Skripte. Die Ausführung nimmt einen Bruchteil der Zeit in Anspruch und ist wesentlich zuverlässiger. (Die von SQL Server für die Skripterstellung generierten Skripte haben immer ausgelöst, manchmal vorhersehbar manchmal nicht, die generierte SQL war nicht kompatibel mit 2008R2 (z. B. verwendet nvarchar(0), oft nicht abgeschlossen, ohne erkennbaren Grund usw.). BCP repliziert auch Verstöße gegen Einschränkungen , wie referentielle Integrität.).