2009-03-12 13 views
5

Mam tabelę z polem ntext. MSDN mówi, że ntext jest przestarzała i zaproponować inne typy danych:Zmień typ kolumny z ntext na varbinary (max)

ntext, text, and image data types will be removed in a future version of Microsoft SQL Server. Avoid using these data types in new development work, and plan to modify applications that currently use them. Use nvarchar(max), varchar(max), and varbinary(max) instead.

W moim konkretnym przypadku zdecydowano się włączyć varbinary(max). Próbowałem zmienić definicję tabeli, ale to nie zadziałało.

ALTER TABLE MyTable ALTER COLUMN MyColumn VARBINARY(MAX); 

Jakie są możliwości, aby zmienić typ do varbinary(max)? Próbowałem zmienić typ z ntext ->nvarchar(max), a następnie z nvarchar(max) ->varbinary(max), ale to nie jest możliwe (błąd: niejawna konwersja z typu danych nvarchar (max) na varbinary (max) nie jest dozwolona).

Jedynym działającym rozwiązaniem jest dodanie nowej kolumny typu varbinary(max), przekształcenie istniejącej wartości w nową kolumnę, a następnie upuszczenie starej kolumny. To zajmuje WAY ZA DUŻO czasu (w moim zestawie danych około 15GB zajmuje to około 30 minut). Właśnie dlatego badam inne możliwości osiągnięcia tego samego (prawdopodobnie w miejscu = bez przenoszenia danych i konwersji).

Odpowiedz

3

Zakładam, że poszedłeś z varbinary (max), ponieważ twoja kolumna ntext zawierała inne niż tekstowe dane? W takim przypadku, myślę, że będziesz musiał dodać osobną kolumnę varbinary (max) do swojej tabeli, a następnie uruchomić operację konwersji, aby skopiować z ntext do nowej kolumny. Następnie usuń starą kolumnę i zmień nazwę nowej kolumny na starą.

"Niejawna konwersja z typu danych nvarchar (max) na varbinary (max) jest niedozwolona" oznacza, że ​​będziesz musiał wyraźnie określić konwersję.

+0

Tak, mam skompresowany tekst w tej kolumnie. –

+0

Dziękuję za odpowiedź. Sądzę, że będziemy musieli przeprowadzić konwersję. –

0

Wygląda na to, że w pewnym momencie dojdzie do konwersji. Jeśli wyszukasz, znajdziesz wiele osób przechodzących od tekstu do varchar (max) i stwierdzenie, że konwersja trwa ponad 20 minut. Moje dwa centy po badaniu przez kilka minut, więc nie bierz tego jako ewangelii.

Jeśli Twoja tabela zajmuje tylko wstawki, możesz przekonwertować istniejące dane w tabeli trzymania, a następnie zmienić nazwy tabel, tak aby gospodarstwo było następnie produkowane. Następnie przenieś wszystkie nowo utworzone dane ze starej tabeli podczas przestoju.

Obsługa aktualizacji sprawia, że ​​rzeczy są bardziej złożone.

+0

Dziękuję bardzo za odpowiedź. Tak, prawdopodobnie masz rację. Miałem nadzieję, że jest inny sposób, aby to zrobić. Dzięki. –

0

Dodanie dodatkowej kolumny jest prawdopodobnie najlepszym sposobem. I rzecz robi tego typu rzeczy w kroki w celu zmniejszenia ryzyka

  1. Dodaj varbinary kolumny (max) jako wartości pustych
  2. zmodyfikować kod insert do wypełnienia obu kolumnach
  3. w wolnym czasie, powiedzmy w ciągu nocy, uruchomić instrukcja UPDATE z CAST
  4. Usuń wszystkie poparcie dla starego kodu kolumnie zapewnienia nowej kolumny są odczytywane
  5. upuść stare kolumny i zmień nową kolumnę aby nie być null, jeśli potrzebne
+0

Dziękuję bardzo za odpowiedź. To właśnie mam obecnie. Szukałem alternatywy, ale chyba nie ma. –

Powiązane problemy