Spalten hinzufügen – SQL server-Tabellen

Ich wurde gebeten, in einen manuellen process zu schauen, den einer meiner Kollegen immer wieder vervollständigt.

Er muss manchmal eine neue Säule auf einen großen Tisch (200 Millionen Zeilen) hinzufügen, er nimmt ihn mehr als eine Stunde, um dies zu tun. Bevor Sie fragen, ja, die Spalten sind nullable, aber manchmal die neue Spalte haben 90% data in ihm.

Anstatt eine neue Spalte zur vorhandenen …

  1. Erstellt eine neue Tabelle
  2. Wähle (*) aus alter Tabelle (Einfügung in neue)
  3. Fügt die neue Spalte als Teil seines Skripts hinzu

Dann löscht er den alten Tisch und benennt den neuen Tisch wieder in das Original um, fügt Index hinzu und komprimiert dann. Er sagt es so viel schneller.

Wenn dies der beste path ist, dann werde ich versuchen, schreiben SSIS-Paket zu versuchen und machen den process mehr nahtlos

Jeder Rat ist willkommen!

Vielen Dank

Erstellen einer neuen Tabellenstruktur und Verschieben aller data zu dieser Tabelle und Löschen der vorherigen Tabelle ist ein guter path nur für ein paar data, können Sie es durch Assistenten in SQL server zu tun.
aber es ist der schlimmste path, um dieses Problem zu lösen (Millionen von data).

Für große datamengen (Millionen von datasätzen) solltest du "Altertabelle" verwenden.

Alter Table MyTable
ADD NewColumn nvarchar(10) null

Die neue Spalte fügt der Tabelle als letzte Spalte hinzu. Wenn Sie dieses Skript verwenden, dauert es weniger als eine Sekunde, denn alle data werden sich nicht bewegen, Sie fügen einfach eine neue Spalte in die Tabelle ein.

aber wenn du die Wizard-Methode nimmst, wie du mit Millionen von datasätzen erwähnt hast, dauert es Stunden.

wie Ali sagt

alter Table MyTable ADD NewColumn nvarchar(10) null

aber dann 90% der data ausfüllen. Als er einen Tisch schon mit ihm hat und der Schlüssel, den er in der Kopie anschließt, ist das alles, was er braucht:

 UPDATE MyTable SET [NewColumn] = b.[NewColumn] FROM MyTable a INNER JOIN NewColumnTable b ON a.[KeyField]= b.[KeyField] 

wäre viel schneller. Du könntest es in SSIS machen, aber wenn das dann viel passiert, dann ist es nicht wirklich wert für ein paar Zeilen SQL.