it-swarm.dev

Zmiana szerokości kolumny

Czy zwiększenie szerokości kolumny (nvarchar) koniecznie spowoduje upuszczenie tabeli?

Innymi słowy, czy można zmienić szerokość w środowisku produkcyjnym z aktywnymi użytkownikami?

Doszedłem do wniosku, że jeśli rozmiar rośnie (w przeciwieństwie do zmniejszania), nie stanowi to problemu.

40
Fernando

Jeśli robisz to za pomocą instrukcji T-SQL, takiej jak poniżej, nie nastąpi upuszczenie tabeli i możesz bezpiecznie to zrobić w środowisku produkcyjnym:

alter table <table> alter column <column> nvarchar(biggernumber) [not] null

Jeśli zrobisz to za pomocą graficznego interfejsu użytkownika tabeli projektowania SSMS, będzie to zależeć od tego, jakiego skryptu zdecyduje się użyć do wdrożenia zmiany. Czasami wstawi dane do tabeli tymczasowej, upuści oryginalną tabelę, utworzy nową wersję tej tabeli i włoży ją z powrotem do nowej. Łatwym sposobem na sprawdzenie, co zrobi, jest kliknięcie przycisku „Generuj skrypt” i sprawdzenie T-SQL, który planuje uruchomić.

53
Derek Kromm

Zwiększenie szerokości kolumny w kolumnie nvarchar nie będzie wymagać upuszczenia tabeli. Ani też ALTER TABLE operacja. Szczegółowe informacje na temat ograniczeń przy zmianie właściwości tabeli lub kolumny można przeczytać w instrukcja ALTER TABLE .

Skopiowałem najważniejsze części z poniższej dokumentacji:

Zmiana rozmiaru kolumny

Możesz zmienić długość, precyzję lub skalę kolumny, określając nowy rozmiar dla typu danych kolumny w klauzuli ALTER COLUMN. Jeśli dane istnieją w kolumnie, nowy rozmiar nie może być mniejszy niż maksymalny rozmiar danych. Ponadto kolumny nie można zdefiniować w indeksie, chyba że kolumna ma typ danych varchar, nvarchar lub varbinary, a indeks nie jest wynikiem ograniczenia klucza podstawowego. Zobacz przykład P.

Zamki i ZMIEŃ TABELĘ

Zmiany określone w ALTER TABLE są wdrażane natychmiast. Jeśli zmiany wymagają modyfikacji wierszy w tabeli, ALTER TABLE aktualizuje wiersze. ALTER TABLE uzyskuje blokadę modyfikacji schematu w tabeli, aby upewnić się, że żadne inne połączenia nie odwołują się nawet do metadanych tabeli podczas zmiany, z wyjątkiem operacji indeksu online, które wymagają bardzo krótkiej blokady SCH-M na końcu. W operacji ALTER TABLE… SWITCH blokada jest uzyskiwana zarówno w tabelach źródłowej, jak i docelowej. Zmiany wprowadzone w tabeli są rejestrowane i można je w pełni odzyskać. Zmiany, które wpływają na wszystkie wiersze w bardzo dużych tabelach, takie jak upuszczanie kolumny lub dodawanie kolumny NOT NULL z wartością domyślną, mogą zająć dużo czasu, aby zakończyć i wygenerować wiele rekordów dziennika. Te instrukcje ALTER TABLE powinny być wykonywane z taką samą ostrożnością jak każda instrukcja INSERT, UPDATE lub DELETE, która wpływa na wiele wierszy.

18
MicSim