Zmień długość varchara w tabeli na żywo

25

Mam serwer MS SQL Server 2008 R2 DB aktualnie używany z aplikacją produkcyjną.

Nowe ulepszenie aplikacji wymaga teraz varchar(100)zwiększenia długości kolumny w tabeli.

Czy można zwiększyć długość tej istniejącej kolumny w prod DB bez wpływu na bieżące dane?

Czy tę zmianę należy wykonać poza godzinami pracy, aby uniknąć zakłóceń usługi?

anatalioki
źródło

Odpowiedzi:

42

Jeśli zwiększasz go do varchar(100 - 8000)(tzn. Coś innego niż varchar(max)) i robisz to za pomocą TSQL zamiast GUI SSMS

ALTER TABLE YourTable ALTER COLUMN YourCol varchar(200) [NOT] NULL

i nie zmieniając nullability kolumny z NULLna NOT NULL(co zablokowałoby tabelę, podczas gdy wszystkie wiersze są sprawdzane i potencjalnie zapisane w ) lub z NOT NULLna NULL w niektórych okolicznościach, jest to szybka zmiana tylko metadanych. Może trzeba poczekać na SCH-Mblokadę na stole, ale gdy się dowie, zmiana nastąpi niemal natychmiast.

Jednym z ostrzeżeń, o których należy pamiętać, jest to, że podczas oczekiwania na SCH-Mblokadę inne zapytania będą blokowane, zamiast przeskakiwać kolejkę przed nią, dlatego warto rozważyć dodanie SET LOCK_TIMEOUTpierwszej.

Upewnij się również, że w ALTER TABLEinstrukcji wyraźnie określono, NOT NULLczy jest to oryginalny stan kolumny, w przeciwnym razie kolumna zostanie zmieniona, aby zezwolić NULL.

Martin Smith
źródło
Dzięki za szybką odpowiedź, właśnie sprawdzałem. To było prawie natychmiastowe.
anataliocs