Ich habe zwei SQL Server (beide Version 2005).
Ich möchte mehrere Tabellen von einer zur anderen migrieren.
Ich habe versucht:
Auf dem Quellserver habe ich mit der rechten Maustaste auf die Datenbank geklickt und Tasks/Generate scripts
..__ ausgewählt. Das Problem ist, dass unter Table/View options
keine Option Script data
vorhanden ist.
Dann habe ich Script Table As/Create script
verwendet, um SQL-Dateien zu generieren, um die Tabellen auf meinem Zielserver zu erstellen. Aber ich brauche immer noch alle Daten.
Dann versuchte ich es mit:
SELECT *
INTO [destination server].[destination database].[dbo].[destination table]
FROM [source server].[source database].[dbo].[source table]
Aber ich bekomme einen Fehler:
Objekt enthält mehr als die maximale Anzahl von Präfixen. Maximum ist 2.
Kann mir bitte jemand die richtige Lösung für mein Problem zeigen?
Versuche dies:
erstellen Sie Ihre Tabelle auf dem Zielserver mit Ihren Skripts aus dem Schritt Script Table As / Create Script
auf dem Zielserver können Sie dann eine T-SQL-Anweisung ausgeben:
INSERT INTO dbo.YourTableNameHere
SELECT *
FROM [SourceServer].[SourceDatabase].dbo.YourTableNameHere
Das sollte gut funktionieren.
Um nur eine weitere Option anzuzeigen (für SQL Server 2008 und höher):
Es gibt eine Skripttabellenoption in Aufgaben/Skripts erstellen! Ich habe es auch am Anfang vermisst! Sie können dort jedoch Einfügungsskripte generieren (sehr schöne Funktion, jedoch an einer sehr intuitiven Stelle).
Wenn Sie mit dem Schritt "Skriptoptionen einstellen" fortfahren, wechseln Sie zur Registerkarte "Erweitert".
Schritte beschrieben hier (Bilder können verstehen, aber ich schreibe dort auf Lettisch).
Versuchen Sie es mit SQL Server Import and Export Wizard (unter Aufgaben -> Daten exportieren).
Es bietet an, die Tabellen in der Zieldatenbank zu erstellen. Wie Sie gesehen haben, kann der Skriptassistent jedoch nur die Tabellenstruktur erstellen.
Wenn die Tabellen bereits mit den Skripts erstellt wurden, können Sie die Daten auch mithilfe des Befehls BCP kopieren, um alle Daten von Ihrem Quellserver auf Ihren Zielserver zu kopieren
So exportieren Sie die Tabellendaten in eine Textdatei auf dem Quellserver:
bcp <database name>.<schema name>.<table name> OUT C:\FILE.TXT -c -t -T -S <server_name[ \instance_name]> -U <username> -P <Password>
So importieren Sie die Tabellendaten aus einer Textdatei auf dem Zielserver:
bcp <database name>.<schema name>.<table name> IN C:\FILE.TXT -c -t -T -S <server_name[ \instance_name]> -U <username> -P <Password>
Nur für die Tritte.
Da ich keine Verbindungsserver erstellen konnte und da die Verbindung zum Produktionsserver nicht ausreichend war, um INSERT INTO
zu verwenden, habe ich Folgendes getan:
Es ist eine Backdoor-Lösung, aber da ich Probleme hatte, hat es für mich funktioniert.
Da ich leere Tabellen mit SCRIPT TABLE AS / CREATE
erstellt habe, um alle Schlüssel und Indizes zu übertragen, konnte ich SELECT INTO
nicht verwenden. SELECT INTO
funktioniert nur, wenn die Tabellen nicht am Zielspeicherort vorhanden sind, Schlüssel und Indizes jedoch nicht kopiert werden. Daher müssen Sie dies manuell tun. Der Nachteil der INSERT INTO
-Anweisung besteht darin, dass Sie alle Spaltennamen manuell angeben müssen. Außerdem können Probleme auftreten, wenn einige Fremdschlüsseleinschränkungen fehlschlagen.
Vielen Dank an alle Antworten, es gibt einige großartige Lösungen, aber ich habe mich entschieden, marc_s Antworten zu akzeptieren.
Dies kann in SQL Server Management Studio über "Import/Export Data ..." durchgeführt werden
Sie können keinen Quell-/Zielserver auswählen.
Wenn sich die Datenbanken auf demselben Server befinden, können Sie Folgendes tun:
Wenn die Spalten der Tabelle gleich sind (einschließlich der Reihenfolge!), Können Sie Folgendes tun:
INSERT INTO [destination database].[dbo].[destination table]
SELECT *
FROM [source database].[dbo].[source table]
Wenn Sie dies einmal tun möchten, können Sie die Quellendatenbank sichern/wiederherstellen. Wenn Sie dies öfter tun müssen, empfiehlt es sich, ein SSIS-Projekt zu starten, in dem Sie die Quelldatenbank definieren (dort können Sie eine beliebige Verbindung auf einem beliebigen Server auswählen) und erstellen Sie ein Projekt, in das Sie Ihre Daten verschieben ..__ Weitere Informationen finden Sie hier: http://msdn.Microsoft.com/en-us/library/ms169917%28v=sql.105%29.aspx
Dies ist eine etwas durchgefahrene Lösung, aber es hat für mich funktioniert. Ich hoffe, es funktioniert auch für andere:
Sie können die select-SQL-Abfrage für die Tabelle ausführen, die Sie exportieren möchten, und das Ergebnis als .xls in Ihrem Laufwerk speichern.
Erstellen Sie nun die Tabelle, die Sie mit allen Spalten und Indizes hinzufügen möchten. Dies kann leicht mit dem Rechtsklick auf die tatsächliche Tabelle und Auswahl der Option "An Skript erstellen" erfolgen.
Jetzt können Sie mit der rechten Maustaste auf die Datenbank klicken, in der Sie Ihre Tabelle hinzufügen möchten, und dann Aufgaben> Importieren auswählen.
Importieren Export-Assistent wird geöffnet, und wählen Sie Weiter aus. Wählen Sie als Eingabedatenquelle Microsoft Excel aus, und suchen Sie dann die zuvor gespeicherte XLS-Datei aus.
Wählen Sie nun den Zielserver und auch die Zieltabelle aus, die wir bereits erstellt haben.
Hinweis: Wenn ein identitätsbasiertes Feld vorhanden ist, möchten Sie möglicherweise in der Zieltabelle die Identitätseigenschaft entfernen, da diese Daten ebenfalls eingefügt werden. Wenn Sie diese Eigenschaft nur als Identitätseigenschaft hätten, würde der Importvorgang fehlerfrei durchgeführt werden.
Klicken Sie nun auf Weiter und auf Fertig stellen. Es wird Ihnen angezeigt, wie viele Datensätze importiert werden, und der Fehler wird zurückgegeben.
Um Daten von der Quelle zum Ziel zu kopieren:
use <DestinationDatabase>
select * into <DestinationTable> from <SourceDataBase>.dbo.<SourceTable>
Eine weitere Option, wenn Sie es zur Verfügung haben: c # .net. Insbesondere der Microsoft.SqlServer.Management.Smo-Namespace.
Ich verwende Code, der dem folgenden in einer Skriptkomponente eines meiner SSIS-Pakete ähnelt.
var tableToTransfer = "someTable";
var transferringTableSchema = "dbo";
var srvSource = new Server("sourceServer");
var dbSource = srvSource.Databases["sourceDB"];
var srvDestination = new Server("destinationServer");
var dbDestination = srvDestination.Databases["destinationDB"];
var xfr =
new Transfer(dbSource) {
DestinationServer = srvDestination.Name,
DestinationDatabase = dbDestination.Name,
CopyAllObjects = false,
DestinationLoginSecure = true,
DropDestinationObjectsFirst = true,
CopyData = true
};
xfr.Options.ContinueScriptingOnError = false;
xfr.Options.WithDependencies = false;
xfr.ObjectList.Add(dbSource.Tables[tableToTransfer,transferringTableSchema]);
xfr.TransferData();
Ich denke, ich musste explizit nach den Bibliotheken Microsoft.SqlServer.Smo suchen und diese zu den Referenzen hinzufügen. Aber außerhalb davon hat das für mich geklappt.
Aktualisieren: Der Namensraum und die Bibliotheken waren komplizierter als ich mich erinnerte.
Fügen Sie für Bibliotheken Verweise hinzu auf:
Fügen Sie für die Namespaces Folgendes hinzu:
Wenn Sie keine Berechtigung zum Verknüpfen von Servern haben, führen Sie die folgenden Schritte aus, um eine Tabelle mit dem SQL Server-Import/Export-Assistenten von einem Server auf einen anderen zu importieren: