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?
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.
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.
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.
Wenn es sich nur um einen Tisch handelt, ist alles, was Sie tun müssen,
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.
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" ...)
INSERT bar.[schema].table SELECT * FROM foo.[schema].table
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:
Guter Beispielworkflow für SQL Server 2008 mit gezeigten Screenshots hier .
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.
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
Daten kopieren
INSERT INTO Alfestonline..url_details(url,[status],recycle)
SELECT url,status,recycle FROM AlfestonlineOld..url_details