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.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *