it-swarm.com.de

Kopieren Sie in SQL Server Tabellen von einer Datenbank in eine andere

Ich habe eine Datenbank namens foo und eine Datenbank namens bar. Ich habe eine Tabelle in foo mit dem Namen tblFoobar, die ich (Daten und alle) aus der Datenbank foo in die Datenbankleiste verschieben möchte. Was ist die SQL-Anweisung, um dies zu tun?

316
RyanKeeter

Auf SQL Server? und auf demselben Datenbankserver? Verwenden Sie die dreiteilige Benennung.

INSERT INTO bar..tblFoobar( *fieldlist* )
SELECT *fieldlist* FROM foo..tblFoobar

Dadurch werden nur die Daten verschoben. Wenn Sie die Tabellendefinition (und andere Attribute wie Berechtigungen und Indizes) verschieben möchten, müssen Sie etwas anderes tun.

203
Amy B

Die Aufgabe "Daten importieren" von SQL Server Management Studio (klicken Sie mit der rechten Maustaste auf den DB-Namen und dann auf die Aufgaben) erledigt das meiste für Sie. Führen Sie es aus der Datenbank aus, in die Sie die Daten kopieren möchten.

Wenn die Tabellen nicht existieren, werden sie für Sie erstellt, aber Sie müssen wahrscheinlich alle Indizes und dergleichen neu erstellen. Wenn die Tabellen vorhanden sind, werden die neuen Daten standardmäßig angehängt. Sie können dies jedoch anpassen (Zuordnungen bearbeiten), sodass alle vorhandenen Daten gelöscht werden.

Ich benutze dies die ganze Zeit und es funktioniert ziemlich gut.

531
David

Das sollte funktionieren:

SELECT * 
INTO DestinationDB..MyDestinationTable 
FROM SourceDB..MySourceTable 

Es wird nicht Constaints, Defaults oder Indizes kopieren. Die erstellte Tabelle hat nicht einen Clustered-Index.

Alternativ können Sie:

INSERT INTO DestinationDB..MyDestinationTable 
SELECT * FROM SourceDB..MySourceTable

Wenn Ihre Zieltabelle existiert und leer ist.

102
leoinfo

Wenn es sich nur um einen Tisch handelt, ist alles, was Sie tun müssen,

  • Skripttabellendefinition
  • Erstellen Sie eine neue Tabelle in einer anderen Datenbank
  • Aktualisieren Sie Regeln, Indizes, Berechtigungen und dergleichen
  • Daten importieren (mehrere Beispiele sind bereits oben abgebildet)

Eine Sache, die Sie berücksichtigen müssen, sind andere Aktualisierungen, z. B. die zukünftige Migration anderer Objekte. Beachten Sie, dass Ihre Quell- und Zieltabelle nicht denselben Namen haben. Dies bedeutet, dass Sie auch Änderungen vornehmen müssen, wenn Sie abhängige Objekte wie Ansichten, gespeicherte Prozeduren und andere Objekte verwenden.

Mit einem oder mehreren Objekten können Sie ohne Probleme manuell arbeiten. Wenn es jedoch mehr als nur ein paar Updates gibt, sind Vergleichstools von Drittanbietern sehr praktisch. Im Moment verwende ich ApexSQL Diff für Schemamigrationen, aber mit keinem anderen Tool kann man etwas falsch machen.

46
Igor Voplov
  1. Erstellen Sie ein Skript für create table in Management Studio. Führen Sie dieses Skript in der Leiste aus, um die Tabelle zu erstellen. (Klicken Sie mit der rechten Maustaste auf die Tabelle im Objekt-Explorer, und wählen Sie "Skript-Tabelle als", "Erstellen als" ...)

  2. INSERT bar.[schema].table SELECT * FROM foo.[schema].table

23
ScottStonehouse

Sie können auch den Assistent zum Generieren von SQL Server-Skripten verwenden, um die Erstellung von SQL-Skripten zu unterstützen, die folgende Aufgaben ausführen können:

  • kopieren Sie das Tabellenschema
  • einschränkungen (Identität, Standardwerte usw.)
  • daten in der Tabelle
  • und viele andere Optionen, falls erforderlich

Guter Beispielworkflow für SQL Server 2008 mit gezeigten Screenshots hier .

16
ryan

Sie können mit diesem Weg gehen: (ein allgemeines Beispiel)

insert into QualityAssuranceDB.dbo.Customers (columnA, ColumnB)
Select columnA, columnB from DeveloperDB.dbo.Customers

Wenn Sie auch die Spaltennamen generieren müssen, um die Einfügungsklausel einzufügen, verwenden Sie:

    select (name + ',') as TableColumns from sys.columns 
where object_id = object_id('YourTableName')

Kopieren Sie das Ergebnis und fügen Sie es in das Abfragefenster ein, um die Namen Ihrer Tabellenspalten darzustellen. Auch dies schließt die Identitätsspalte aus:

    select (name + ',') as TableColumns from sys.columns 
where object_id = object_id('YourTableName') and is_identity = 0

Denken Sie daran, dass das Skript zum Kopieren von Zeilen funktioniert, wenn die Datenbanken zum selben Speicherort gehören.


Sie können dies versuchen.

select * into <Destination_table> from <Servername>.<DatabaseName>.dbo.<sourceTable>

Der Servername ist optional, wenn sich beide DBs auf demselben Server befinden.

9
NeverHopeless

Wenn eine Tabelle vorhanden ist und nur Daten kopiert werden sollen, können Sie diese Abfrage ausführen.

in Destination_Existing_Tbl einfügen Wählen Sie col1, col2 FROM Source_Tbl

1
Mohan

Daten kopieren

INSERT INTO Alfestonline..url_details(url,[status],recycle) 
SELECT url,status,recycle FROM AlfestonlineOld..url_details
0
Arun Prasad E S