2012-05-15 20 views

Antwort

17

Sie können nur Standard-Syntax verwenden, um die Tabelle zu ändern:

ALTER TABLE some_table ALTER COLUMN some_column nvarchar(max) 

Sie wollen wahrscheinlich jedoch alle Indizes neu zu erstellen, um sicherzustellen, dass sie wie erwartet funktionieren.

2

Nehmen Sie immer ein Backup, also egal was passiert, Sie können zurückgehen, wie es war.

Mit besagtem Wechsel von varchar(max) zu nvarchar(max) sollten keine Daten verlieren.

Randbemerkung: Sie könnten Probleme haben, wenn Sie nvarchar(max) zu varchar(max) in der anderen Richtung ändert wurden, da der Prozess erweiterte Zeichen konvertieren würde, wenn überhaupt vorhanden sind.

7

Eine weitere Option Störung zu minimieren (da ich die ALTER COLUMN nicht glauben, dass Online auftreten), ist:

ALTER TABLE dbo.table ADD new_column NVARCHAR(MAX); -- metadata operation 

Jetzt können Sie die Daten in Wellen/Chargen/Transaktionen aktualisieren, statt die Änderung des Auftragens die ganze Tabelle in einer langen Transaktion. Wenn Sie sicher sind, dass die Daten kopiert wurden, können Sie die alte Spalte löschen, die neue umbenennen und alle betroffenen Indizes neu erstellen (Ihre MAX-Spalte kann nicht im Schlüssel eines Indexes enthalten sein, aber Sie haben möglicherweise versehentlich in eine INCLUDE-Definition einfügen - wenn das der Fall ist, sollten Sie das trotzdem hinterfragen.

Sie möchten immer noch alle Indizes neu erstellen, um den jetzt nicht verwendeten Speicherplatz zurück zu gewinnen (was Sie online tun können, wenn Sie Enterprise Edition verwenden).

+0

sehr guter Punkt +1 – RThomas

Verwandte Themen