2012-05-15 12 views

Odpowiedz

17

można po prostu użyć standardowej składni aby zmienić tabelę:

ALTER TABLE some_table ALTER COLUMN some_column nvarchar(max) 

Prawdopodobnie chcą odbudować żadnych indeksów jednak, aby upewnić się, że działa zgodnie z oczekiwaniami.

2

Zawsze wykonuj kopię zapasową, więc niezależnie od tego, co się stanie, możesz wrócić do stanu rzeczy.

Po tej zmianie zmiana z varchar(max) na nvarchar(max) nie powinna powodować utraty danych.

marginesie: może masz obawy jeśli zmieniały się w innym kierunku nvarchar(max) do varchar(max) jako proces musiałby konwersji znaków rozszerzonych jeśli były obecne.

7

Innym rozwiązaniem, aby zminimalizować zakłócenia (ponieważ nie wierzę w ALTER COLUMN nastąpi online), jest:

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

Teraz możesz zaktualizować dane w fale/partii/transakcji zamiast stosowania zmian cała tabela w jednej długiej transakcji. Gdy masz pewność, że dane są kopiowane, możesz usunąć starą kolumnę, zmienić nazwę nowego i ponownie utworzyć indeksy, których dotyczy ta zmiana (Twoja kolumna MAX nie może znajdować się w kluczu żadnego indeksu, ale możesz mieć niechcący umieścił go w definicji INCLUDE - jeśli tak jest, powinieneś to zakwestionować).

Nadal będziesz chciał odbudować wszystkie indeksy, aby odzyskać teraz niewykorzystane miejsce (które możesz zrobić online, jeśli używasz wersji Enterprise Edition).

+0

bardzo dobry punkt +1 – RThomas

Powiązane problemy