Używam SQL Server 2008 i muszę powiększyć pole VARCHAR, od (200 do 1200) w tabeli zawierającej około 500 tys. Wierszy. Muszę wiedzieć, czy są jakieś problemy, których nie brałem pod uwagę.
Będę używać tego oświadczenia TSQL:
ALTER TABLE MyTable
ALTER COLUMN [MyColumn] VARCHAR(1200)
Wypróbowałem już to na kopii danych i to stwierdzenie nie miało żadnych złych skutków, które widziałem.
Czy są więc jakieś problemy, których mogłem nie wziąć pod uwagę?
Nawiasem mówiąc, kolumna nie jest indeksowana.
sql-server
sql-server-2008
varchar
alter-column
Paul T. Davies
źródło
źródło
Odpowiedzi:
To jest tylko zmiana metadanych: jest szybka.
Spostrzeżenie: jawnie określ NULL lub NOT NULL, aby uniknąć „wypadków”, jeśli jedno z ustawień SET ANSI_xx jest inne np. Z jakiegoś powodu uruchom w osql, a nie SSMS
źródło
varchar(200)
do obowiązują te same zasadyvarchar(max)
?Chciałem tylko dodać moje 2 centy, ponieważ wygooglowałem to pytanie b / c znalazłem się w podobnej sytuacji ...
PAMIĘTAJ, że zmiana z
varchar(xxx)
navarchar(yyy)
to rzeczywiście zmiana metadanych, ale zmiana navarchar(max)
nie. Ponieważvarchar(max)
wartości (znane również jako wartości BLOB - obraz / tekst itp.) Są przechowywane na dysku inaczej, nie w wierszu tabeli, ale „poza wierszem”. Więc serwer zwariuje na dużym stole i przestanie odpowiadać przez kilka minut (godzin).--no downtime ALTER TABLE MyTable ALTER COLUMN [MyColumn] VARCHAR(1200) --huge downtime ALTER TABLE MyTable ALTER COLUMN [MyColumn] VARCHAR(max)
PS. to samo dotyczy
nvarchar
lub oczywiście.źródło
Zmiana na Varchar (1200) z Varchar (200) nie powinna spowodować żadnego problemu, ponieważ jest to tylko zmiana metadanych, a ponieważ SQL Server 2008 obcina nadmierne puste miejsca, nie powinno być również żadnych różnic w wydajności, więc w skrócie nie powinno być problemów z tworzeniem zmiana.
źródło
Innym powodem, dla którego powinieneś unikać konwersji kolumny na varchar (max), jest to, że nie możesz utworzyć indeksu w kolumnie varchar (max).
źródło
W moim przypadku kolumna alter nie działała, więc można użyć polecenia `` Modyfikuj '', na przykład:
alter table [nazwa_tabeli] MODIFY kolumna [nazwa_kolumny] varchar (1200);
źródło