Spaltenbreite ändern

39

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

Kann mit anderen Worten die Breite in einer Produktionsumgebung mit aktiven Benutzern geändert werden?

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

Fernando
quelle

Antworten:

52

Wenn Sie dies mit einer T-SQL-Anweisung wie der folgenden tun, wird keine Tabelle gelöscht, und Sie können dies ohne Bedenken in einer Produktionsumgebung tun:

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

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

Derek Kromm
quelle
1
Ich dachte sogar, dass der "Skript generieren" -Button eine Warnung ausgibt, dass Sie im Begriff sind, eine Tabelle zu löschen, bevor Ihnen das Skript überhaupt angezeigt wird.
Nick Chammas
1
Es löst zwar den Fehler aus, führt das Skript jedoch erst dann aus, wenn Sie im Fenster mit dem Skript auf OK (oder Ausführen oder was auch immer) klicken. Sie können das Skript kopieren und das Fenster schließen, in dem Sie das Skript sehen.
Mrdenny
Aber funktioniert es, wenn von Float zu Decimal (n, n) gewechselt wird?
Nishanth Shaan
Welche Auswirkung hat dies, wenn die Tabelle repliziert wird? Ich gehe davon aus, dass die Abonnententabellen nicht automatisch aktualisiert werden.
tmwoods
18

Das Erhöhen der Spaltenbreite einer nvarcharSpalte erfordert kein Ablegen der Tabelle. Weder würde eine ALTER TABLEOperation. 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 Klausel ALTER COLUMN eine neue Größe für den Spaltendatentyp angeben. Wenn Daten in der Spalte vorhanden sind, kann die neue Größe nicht kleiner als die maximale Größe der Daten sein. Die Spalte kann auch 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.

Schlösser und ALTER TABLE

Die in ALTER TABLE angegebenen Änderungen werden sofort umgesetzt. Wenn die Änderungen Änderungen an den Zeilen in der Tabelle erfordern, aktualisiert ALTER TABLE die Zeilen. ALTER TABLE erwirbt eine Schemaänderungssperre für die Tabelle, um sicherzustellen, dass während der Änderung keine anderen Verbindungen auf die Metadaten der 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 aktiviert. 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 einem Standardwert, können viel Zeit in Anspruch nehmen, um viele Protokolldatensätze fertigzustellen und zu generieren. Diese ALTER TABLE-Anweisungen sollten mit der gleichen Sorgfalt ausgeführt werden wie INSERT, UPDATE,

MicSim
quelle
Auch tolle Antwort. Aber ich konnte nur einen auswählen. Vielen Dank!
Fernando