Mám server MS SQL Server 2008 R2 DB, který se aktuálně používá s produkční aplikací.
Nové vylepšení aplikace nyní vyžaduje zvětšení sloupce varchar(100)
v tabulce.
Může být délka tohoto stávající sloupec v prod DB zvýšit bez ovlivnění aktuálních dat?
Musí být tato změna dokončena mimo pracovní dobu, aby nedošlo k přerušení služby?
Odpověď
Pokud ji zvyšujete na varchar(100 - 8000)
(tj. Na cokoli jiného než varchar(max)
) a děláte to spíše prostřednictvím TSQL než pomocí SSMS GUI
ALTER TABLE YourTable ALTER COLUMN YourCol varchar(200) [NOT] NULL
a nezměnit možnou hodnotu Null pro sloupec z NULL
na NOT NULL
( který by uzamkl tabulku, zatímco všechny řádky jsou validovány a potenciálně zapsány do ) nebo z NOT NULL
do NULL
za určitých okolností pak jde pouze o rychlou změnu metadat. Možná bude muset počkat na SCH-M
zámek na stole, ale jakmile zjistí, že změna bude téměř okamžitá.
Jedna výhrada, kterou si musíte uvědomit, je že během čekání na SCH-M
zámek budou ostatní dotazy blokovány spíše než přeskočit frontu před něj, takže možná budete chtít přidat SET LOCK_TIMEOUT
jako první.
Zkontrolujte také v ALTER TABLE
prohlášení, které výslovně zadáte NOT NULL
, pokud se jedná o původní stav sloupce, jinak se sloupec změní tak, aby umožňoval NULL
.