it-swarm-eu.dev

Spaltenbreite ändern

Wird das Erhöhen der Spaltenbreite (nvarchar) die Tabelle zwangsläufig löschen?

Mit anderen Worten, kann die Breite in einer Produktionsumgebung mit aktiven Benutzern geändert werden?

Ich dachte mir, dass dies kein Problem wäre, wenn die Größe zunimmt (im Gegensatz zur Abnahme).

40
Fernando

Wenn Sie dies über eine T-SQL-Anweisung wie die folgende tun, wird keine Tabelle gelöscht, und Sie können dies sicher in einer Produktionsumgebung tun:

alter table <table> alter column <column> nvarchar(biggernumber) [not] null

Wenn Sie dies über die GUI der SSMS-Designtabelle tun, hängt dies davon ab, welches Skript zur Implementierung der Änderung verwendet wird. Manchmal werden Daten in eine temporäre Tabelle eingefügt, die ursprüngliche Tabelle gelöscht, eine neue Version dieser Tabelle erstellt und wieder in die neue Tabelle eingefügt. Eine einfache Möglichkeit, um herauszufinden, was es tun wird, besteht darin, auf die Schaltfläche "Skript generieren" zu klicken und sich das T-SQL anzusehen, das ausgeführt werden soll.

53
Derek Kromm

Das Erhöhen der Spaltenbreite einer nvarchar -Spalte erfordert kein Löschen einer Tabelle. Weder würde irgendein ALTER TABLE Betrieb. Einzelheiten zu Einschränkungen beim Ändern von Tabellen- oder Spalteneigenschaften finden Sie in der Anweisung ALTER TABLE .

Ich habe die wichtigsten Teile aus der folgenden Dokumentation kopiert:

Ändern der Größe einer Spalte

Sie können die Länge, Genauigkeit oder Skalierung einer Spalte ändern, indem Sie in der ALTER COLUMN-Klausel eine neue Größe für den Spaltendatentyp angeben. Wenn Daten in der Spalte vorhanden sind, darf die neue Größe nicht kleiner als die maximale Größe der Daten sein. Außerdem kann die Spalte nicht in einem Index definiert werden, es sei denn, die Spalte ist ein varchar-, nvarchar- oder varbinary-Datentyp und der Index ist nicht das Ergebnis einer PRIMARY KEY-Einschränkung. Siehe Beispiel P.

Sperren und ALTER TABLE

Die in ALTER TABLE angegebenen Änderungen werden sofort implementiert. Wenn die Änderungen Änderungen an den Zeilen in der Tabelle erfordern, aktualisiert ALTER TABLE die Zeilen. ALTER TABLE erhält eine Schemamodifikationssperre für die Tabelle, um sicherzustellen, dass während der Änderung keine anderen Verbindungen auf die Metadaten für die Tabelle verweisen, mit Ausnahme von Online-Indexoperationen, für die am Ende eine sehr kurze SCH-M-Sperre erforderlich ist. Bei einer Operation ALTER TABLE… SWITCH wird die Sperre sowohl für die Quell- als auch für die Zieltabelle erfasst. Die an der Tabelle vorgenommenen Änderungen werden protokolliert und können vollständig wiederhergestellt werden. Änderungen, die sich auf alle Zeilen in sehr großen Tabellen auswirken, z. B. das Löschen einer Spalte oder das Hinzufügen einer NOT NULL-Spalte mit einer Standardeinstellung, können lange dauern, bis viele Protokolldatensätze abgeschlossen und generiert sind. Diese ALTER TABLE-Anweisungen sollten mit der gleichen Sorgfalt ausgeführt werden wie alle INSERT-, UPDATE- oder DELETE-Anweisungen, die viele Zeilen betreffen.

18
MicSim