web-dev-qa-db-de.com

Exportieren Sie Tabellendaten von einem SQL Server zu einem anderen

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?

49
no9

Versuche dies:

  1. erstellen Sie Ihre Tabelle auf dem Zielserver mit Ihren Skripts aus dem Schritt Script Table As / Create Script

  2. 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.

52
marc_s

Um nur eine weitere Option anzuzeigen (für SQL Server 2008 und höher):

  1. klicken Sie mit der rechten Maustaste auf Datenbank -> wählen Sie 'Aufgaben' -> wählen Sie 'Generate Scripts'
  2. Wählen Sie bestimmte Datenbankobjekte aus, die Sie kopieren möchten. Sagen wir eine oder mehrere Tabellen. Weiter klicken
  3. Klicken Sie auf Erweitert und blättern Sie zu "Datentypen für Skript" und wählen Sie "Schema und Daten". OK klicken
  4. Legen Sie fest, wo das generierte Skript gespeichert werden soll, und klicken Sie auf Weiter
36
Konstantin

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).

9
Jānis

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>
5
praveen

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:

  • eine Sicherungskopie der Produktionsserverdatenbank erstellt
  • stellte die Datenbank auf meinem Testserver wieder her
  • führte die Einfügung in Anweisungen aus

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.

2
no9

Dies kann in SQL Server Management Studio über "Import/Export Data ..." durchgeführt werden

2
Vil

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

2
YvesR

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.

1
sinod

Um Daten von der Quelle zum Ziel zu kopieren:

use <DestinationDatabase>
select * into <DestinationTable> from <SourceDataBase>.dbo.<SourceTable>
1
David Brabant

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:

  • Microsoft.SqlServer.Smo.dll
  • Microsoft.SqlServer.SmoExtended.dll
  • Microsoft.SqlServer.ConnectionInfo.dll
  • Microsoft.SqlServer.Management.Sdk.Sfc.dll

Fügen Sie für die Namespaces Folgendes hinzu:

  • Microsoft.SqlServer.Management.Common
  • Microsoft.SqlServer.Management.Smo
0
pwilcox

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:

  • Klicken Sie mit der rechten Maustaste auf die Quelldatenbank, aus der Sie kopieren möchten.
  • Wählen Sie Aufgaben - Daten exportieren.
  • Wählen Sie Sql Server Native Client in der Datenquelle.
  • Wählen Sie Ihren Authentifizierungstyp (SQL Server- oder Windows-Authentifizierung).
  • Wählen Sie die Quelldatenbank aus.
  • Wählen Sie als Nächstes das Ziel: SQL Server Native Client
  • Geben Sie Ihren Servernamen ein (den Server, auf den Sie die Tabelle kopieren möchten).
  • Wählen Sie Ihren Authentifizierungstyp (SQL Server- oder Windows-Authentifizierung).
  • Wählen Sie die Zieldatenbank aus.
  • Wählen Sie Daten kopieren.
  • Wählen Sie Ihren Tisch aus der Liste.
  • Klicken Sie auf Weiter, wählen Sie Sofort ausführen, oder speichern Sie das Paket optional in einer Datei oder auf einem SQL Server, wenn Sie es später ausführen möchten.
  • Fertig
0
live-love