Ich verwende SQL Server 2008 und muss ein VARCHAR-Feld in einer Tabelle mit etwa 500.000 Zeilen von (200 bis 1200) vergrößern. Was ich wissen muss, ist, wenn es Probleme gibt, die ich nicht berücksichtigt habe.
Ich werde diese TSQL-Anweisung verwenden:
ALTER TABLE MyTable
ALTER COLUMN [MyColumn] VARCHAR(1200)
Ich habe es bereits an einer Kopie der Daten versucht und diese Aussage hatte keine negativen Auswirkungen, die ich sehen konnte.
Gibt es also mögliche Probleme, die ich möglicherweise nicht berücksichtigt habe?
Die Spalte ist übrigens nicht indiziert.
sql-server
sql-server-2008
varchar
alter-column
Paul T. Davies
quelle
quelle
Antworten:
Dies ist nur eine Metadatenänderung: Sie ist schnell.
Eine Beobachtung: Geben Sie NULL oder NOT NULL explizit an, um "Unfälle" zu vermeiden, wenn eine der SET ANSI_xx-Einstellungen unterschiedlich ist, z. B. aus irgendeinem Grund in osql und nicht in SSMS ausgeführt wird
quelle
varchar(200)
nach die gleichen Regeln geltenvarchar(max)
?Ich wollte nur meine 2 Cent hinzufügen, da ich diese Frage gegoogelt habe, befand ich mich in einer ähnlichen Situation ...
Seien Sie sich bewusst, dass der Wechsel von
varchar(xxx)
zuvarchar(yyy)
tatsächlich eine Änderung der Metadaten ist, der Wechsel zuvarchar(max)
jedoch nicht. Weilvarchar(max)
Werte (auch bekannt als BLOB-Werte - Bild / Text usw.) auf der Festplatte unterschiedlich gespeichert werden, nicht innerhalb einer Tabellenzeile, sondern "außerhalb der Zeile". Der Server wird also auf einem großen Tisch verrückt und reagiert für Minuten (Stunden) nicht mehr.PS. Gleiches gilt für
nvarchar
oder natürlich.quelle
Wenn Sie von Varchar (200) zu Varchar (1200) wechseln, sollten Sie keine Probleme haben, da es sich nur um eine Metadatenänderung handelt. Da SQL Server 2008 übermäßige Leerzeichen abschneidet, sollten Sie auch keine Leistungsunterschiede feststellen. Kurz gesagt, es sollten keine Probleme mit der Erstellung der Veränderung.
quelle
Ein weiterer Grund, warum Sie die Konvertierung der Spalte in varchar (max) vermeiden sollten, ist, dass Sie keinen Index für eine varchar (max) -Spalte erstellen können.
quelle
In meinem Fall funktionierte die Änderungsspalte nicht, so dass man den Befehl 'Ändern' verwenden kann, wie zum Beispiel:
alter table [tabellenname] MODIFY column [spaltenname] varchar (1200);
quelle