Frage

Ich habe eine Tabelle, das Feld ntext hat. MSDN sagt, dass ntext veraltet ist und sie schlagen andere Datentypen:

  

ntext, Text und Bilddatentypen werden in einer zukünftigen Version von Microsoft SQL Server entfernt. Vermeiden Sie diese Datentypen in neuer Entwicklungsarbeit, und planen Sie das Ändern von Anwendungen, die sie aktuell verwendet werden. Verwendung nvarchar (max), VARCHAR (max) und varbinary (max) statt.

In meinem speziellen Fall wurde beschlossen, varbinary(max) zu wechseln. Ich habe versucht, die Tabellendefinition zu ändern, aber das hat nicht funktioniert.

ALTER TABLE MyTable ALTER COLUMN MyColumn VARBINARY(MAX);

Was sind die Möglichkeiten, die Art zu ändern, um varbinary(max) Ich habe versucht, die Art von ntext ändern -> nvarchar(max) und dann von nvarchar(max) -> varbinary(max) aber das ist nicht möglich (Fehler: Implizite Konvertierung von Daten Typ nvarchar (max) zu varbinary (max) ist nicht erlaubt).

Die einzige funktionierende Lösung ist eine neue Spalte vom Typ varbinary(max), wandeln den vorhandenen Wert in die neue Spalte hinzuzufügen und dann die alte Säule fallen. Dieser Vorgang dauert viel zu viel Zeit (auf meinem Datenmenge von etwa 15GB dauert es etwa 30 Minuten). Deshalb habe ich andere Möglichkeiten untersuche das gleiche zu erreichen (möglicherweise in-place = ohne Verschieben von Daten und Konvertierung).

War es hilfreich?

Lösung

Ich nehme an, Sie mit varbinary (max) gehen, weil Ihre ntext- Spalte in ihm nicht Textdaten hatten? In diesem Fall denke ich, du gehst eine separate varbinary (max) Spalte zu Ihrer Tabelle hinzuzufügen zu haben, dann eine Umwandlungsoperation von der ntext- auf die neue Spalte zu kopieren, führen. Dann löschen Sie die alte Spalte, und benennen Sie die neue Spalte auf den alten Namen.

„Die implizite Konvertierung von Datentyp nvarchar (max) bis varbinary (max) ist nicht erlaubt“ bedeutet, dass Sie über die Umwandlung explizit haben sein werden.

Andere Tipps

Es scheint, wie diese Umwandlung zu einem bestimmten Zeitpunkt passieren haben wird. Wenn Sie suchen, werden Sie viele Menschen aus dem Text zu varchar (max) gehen zu finden und zu erklären, es 20+ Minuten dauert zu konvertieren. Meine zwei Cent nach ein paar Minuten der Erforschung, so nehmen Sie es nicht als Evangelium.

Wenn Ihre Tabelle nur Einsätze nimmt, können Sie die vorhandenen Daten in einer Halte Tabelle konvertieren und dann die Tabellen umbenennen, so dass die Halte Produktion ist dann. Verschieben Sie dann alle neu erstellten Daten aus der alten Tabelle während der Ausfallzeit.

Umgang mit Updates macht die Sache komplexer natürlich.

die zusätzliche Spalte Hinzufügen ist wahrscheinlich der beste Weg zu gehen. Ich bin dafür tun, diese Art der Sache in den Schritten zur Verringerung der Risiken

  1. Fügen Sie die Spalte varbinary (max) als Nullable
  2. ändern Sie bitte Ihren Einsatz Codes beiden Spalten füllen
  3. In Ihrer Freizeit sagt über Nacht, führen Sie die UPDATE-Anweisung mit einem CAST
  4. Entfernen Sie alle Code-Unterstützung für die alte Säule sorgen neue Spalte lesen
  5. Löschen Sie die alte Spalte, und die neue Spalte ändert nicht null zu sein, wenn nötig
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top