2009-03-05 10 views
9

Ich arbeite mit SQL Server (ich bin ein SQL Server noob) und versuche, eine Tabelle zu ändern.Ich möchte CREATE TABLE LIKE sicher speichern Daten, während ich Schlüssel und Einschränkungen und alle anderen rigamorole, auf dem SQL Server scheint zu erfordern fallen, wenn auf der ursprünglichen Tabelle zu ändern, aber ich habe nicht in der Lage gewesen, ein Spiel zu diesem Befehl zu finden ...Was entspricht "CREATE TABLE ... LIKE ..." in SQL Server

+0

Ich benutze Visual Studio SQL Server-Explorer zu diesem Zweck ermöglicht es die automatische Aktualisierung der Datenbankstruktur. – Ginden

Antwort

14

können Sie tun

SELECT * INTO #MyTable_tmp VON MyTable

Dann ändern Sie Ihre MyTable, und kopieren Sie Ihre Daten zurück. Andere Ansätze, die ich gesehen habe, ist eine neue Tabelle erstellen, nennen Sie es Mytable_Tmp (keine temporäre Tabelle), die Ihre neue Tabelle sein wird.

Kopieren Sie dann Ihre Daten, wenn Sie Migrationen durchführen möchten. Dann werden Sie die Originaltabelle löschen und auf Mytable umbenennen.

Oder Sie können eines der vielen ausgezeichneten Tools, die Datenbanken zu vergleichen und Differenzskripte oder VSTS DB Edition (Kommt mit Entwickler) und Sie können ein Diff-Skript von einer Projektdatei zu einer DB.

bearbeiten

Wenn Sie * INTO #MyTable FROM MyTable SELECT ausführen, erstellt SQL Server eine neue temporäre Tabelle #MyTable genannt, die jede Spalte und Datentyp aus dem select-Klausel übereinstimmt. In diesem Fall wählen wir *, damit es mit MyTable übereinstimmt. Dies erstellt nur die Spalten, die keine Standardwerte, Constraints-Indizes oder irgendetwas anderes kopieren.

+0

Meine Frage ist nicht, wie Sie Daten in eine bereits vorhandene temporäre Tabelle einfügen. Mir geht es mehr darum, eine temporäre Tabelle zu erstellen, die der vorhandenen Tabelle entspricht. Ich habe Dutzende von Tabellen, die ich ändern muss, und ich möchte die temporären Tabellen nicht manuell erstellen müssen. – Ichorus

+0

Ahh! Sehr gut! Vielen Dank! – Ichorus

+0

Und die Schlüssel? Index? fremde Schlüssel? –

17

Sie möchten die gleiche Struktur neu erstellen?

wie diese

SELECT * 
into test 
FROM myRealTable 
where 0=1 

werden keine Daten in die neue Tabelle eingefügt werden

+2

SELECT top 0 * in test FROM myRealTable, wird auch das gleiche Ergebnis erzielen –

Verwandte Themen