SQL Server - Eine Kopie einer Datenbanktabelle erstellen und in derselben Datenbank ablegen?

106

Ich habe eine Tabelle ABC in einer Datenbank-DB. Ich möchte Kopien von ABC mit den Namen ABC_1, ABC_2, ABC_3 in derselben Datenbank erstellen. Wie kann ich das mit Management Studio (vorzugsweise) oder SQL-Abfragen tun?

Dies ist für SQL Server 2008 R2.

sequel.learner
quelle
1
Ein anderer Beitrag ist nicht direkt verwandt, kann aber mit dem oben genannten Anwendungsfall in Verbindung gebracht werden - stackoverflow.com/questions/6810425/…. Dies kann nützlich sein, wenn Sie die Kopien der Tabelle bearbeiten möchten (z. B. Nullen zulassen, Datentyp ändern usw. .) ohne die Kopien neu erstellen zu müssen.
sequel.learner

Antworten:

209

Verwendung SELECT ... INTO:

SELECT *
INTO ABC_1
FROM ABC;

Dadurch wird eine neue Tabelle erstellt ABC_1, die dieselbe Spaltenstruktur wie hatABC und dieselben Daten enthält. Einschränkungen (z. B. Schlüssel, Standardwerte) werden jedoch nicht kopiert.

Sie können diese Abfrage jedes Mal mehrmals mit einem anderen Tabellennamen ausführen.


Wenn Sie die Daten nicht kopieren müssen, um nur eine neue leere Tabelle mit derselben Spaltenstruktur zu erstellen, fügen Sie eine WHEREKlausel mit einem falschen Ausdruck hinzu:

SELECT *
INTO ABC_1
FROM ABC
WHERE 1 <> 1;
Mahmoud Gamal
quelle
3
Perfekte Antwort auf mein Problem.
sequel.learner
8
Funktioniert nicht vollständig .... berechnete Spalten im Original werden im Ziel nicht wie die gleichen kopiert. Auch PK- und Standardeinschränkungen werden nicht kopiert
Simon Green
@SimonGreen - Sie können mit Ihrem Code eine neue Frage zu diesem Problem stellen.
Mahmoud Gamal
3
Natürlich funktioniert es nicht ganz. Er warnte davor, dass Einschränkungen nicht kopiert werden, ebenso wenig wie Primärschlüssel oder Standardwerte. Der von ihm angebotene Befehl erstellt eine neue Tabelle mit derselben Spaltenstruktur (wie er sagte) und fügt alle Daten für Sie in die neue Tabelle ein.
user5855178
1
Ich finde die Verwendung SELECT TOP(0) *sauberer als die immer falsche WHEREAussage Methode
Thymine
20

Kopieren Sie das Schema (DDL generieren) über die SSMS-Benutzeroberfläche

Erweitern Sie in SSMS Ihre Datenbank im Objekt-Explorer , gehen Sie zu Tabellen , klicken Sie mit der rechten Maustaste auf die Tabelle, die Sie interessiert, und wählen Sie Skripttabelle als , Erstellen für , Neues Abfrage-Editor-Fenster . Führen Sie eine Suche und Ersetzung durch ( STRG + H ), um den Tabellennamen zu ändern (dh geben Sie sie ABCin das Feld Suchen nach und ABC_1in Ersetzen durch ein und klicken Sie dann auf OK ).

Schema über T-SQL kopieren

Die anderen Antworten, die zeigen, wie dies mit SQL gemacht wird, funktionieren ebenfalls gut, aber der Unterschied zu dieser Methode besteht darin, dass Sie auch alle Indizes, Einschränkungen und Trigger erhalten.

Daten kopieren

Wenn Sie Daten einschließen möchten, führen Sie nach dem Erstellen dieser Tabelle das folgende Skript aus, um alle Daten aus ABC zu kopieren (wobei Sie die gleichen ID-Werte beibehalten, wenn Sie ein Identitätsfeld haben):

set identity_insert ABC_1 on
insert into ABC_1 (column1, column2) select column1, column2 from ABC
set identity_insert ABC_1 off
JohnLBevan
quelle
1
Sind Sie sicher, dass diese Methode auch die Indizes kopiert? Ich habe es versucht und es nicht.
BornToCode
3
Sie müssen IDENTITY_INSERTauf ON setzen, damit die Identitätsspalte "manuell" gesetzt werden kann. Sie haben die Reihenfolge in Ihrem Beispiel gemischt. Außerdem müssen Sie EXPLICIT Ihre Spalten auflisten
Jean
2
Danke @jean; gut entdeckt nach 6 Jahren unbemerkt! Fest.
JohnLBevan
Dies hat das Problem für mich fast gelöst. Der letzte Trick ist, dass Sie den Ordner "Columns" in der Baumstruktur in SSMS in den Editor ziehen können, um eine Liste der Spalten zu erhalten. Ich habe eine Zeitstempelspalte in jeder Tabelle, daher musste ich die Liste der Spalten abrufen und dann den Zeitstempel entfernen.
Wade Hatler
10

Wenn Sie die Tabelle mit all ihren Einschränkungen und Schlüsseln duplizieren möchten, gehen Sie wie folgt vor:

  1. Öffnen Sie die Datenbank in SQL Management Studio.
  2. Klicken Sie mit der rechten Maustaste auf die Tabelle, die Sie duplizieren möchten.
  3. Wählen Sie Script Table als -> Create to -> New Query Editor Window. Dadurch wird ein Skript generiert, um die Tabelle in einem neuen Abfragefenster neu zu erstellen.
  4. Ändern Sie den Tabellennamen und die relativen Schlüssel und Einschränkungen im Skript.
  5. Führen Sie das Skript aus.

Führen Sie dann zum Kopieren der Daten das folgende Skript aus:

SET IDENTITY_INSERT DuplicateTable ON

INSERT Into DuplicateTable ([Column1], [Column2], [Column3], [Column4],... ) 
SELECT [Column1], [Column2], [Column3], [Column4],... FROM MainTable

SET IDENTITY_INSERT DuplicateTable OFF
Rousonur Jaman
quelle
4

1. Option

select *
  into ABC_1
  from ABC;

2. Option: Verwenden Sie SSIS, dh klicken Sie mit der rechten Maustaste auf die Datenbank im Objekt-Explorer> Alle Aufgaben> Daten exportieren

  • Quelle und Ziel: Ihre DB
  • Quellentabelle: ABC
  • Zieltabelle: ABC_1 (Tabelle wird erstellt)
Claude
quelle
2

Dies ist eine weitere Option:

select top 0 * into <new_table> from <original_table>
Keni
quelle
2
Diese Anforderung kopiert eine Tabelle ohne Daten. Der Benutzer hat gebeten, Tabellen überhaupt zu kopieren.
Alekzander
1

Verwenden Sie SQL Server Management Studio oder Netcat und das wird einfacher zu manipulieren SQL

Gaswurzel
quelle
1

Sie müssen SSIS schreiben, um die Tabelle und ihre Daten, Einschränkungen und Trigger zu kopieren. Wir haben in unserer Organisation eine Software namens Kal Admin von kalrom Systems, die eine kostenlose Version zum Herunterladen hat (ich denke, dass die Funktion zum Kopieren von Tabellen optional ist).

Chris D.
quelle