Jag har en MS SQL Server 2008 R2 DB-server som för närvarande används med en produktionsapp.
En ny förbättring av appen kräver nu en varchar(100)
kolumn i en tabell för att öka längden.
Kan längden på detta befintlig kolumn i prod DB ökas utan att det påverkar aktuell data?
Måste denna ändring genomföras under öppen tid för att undvika störningar i tjänsten?
Svar
Om du ökar det till varchar(100 - 8000)
(dvs. allt annat än varchar(max)
) och du gör detta via TSQL snarare än SSMS GUI
ALTER TABLE YourTable ALTER COLUMN YourCol varchar(200) [NOT] NULL
och ändrar inte kolumnens ogiltighet från NULL
till NOT NULL
( vilket låser tabellen medan alla rader är validerade och eventuellt skrivna till ) eller från NOT NULL
till NULL
under vissa omständigheter så är det här bara en snabb metadataändring. Det kan behöva vänta på ett SCH-M
-lås på bordet, men när det väl förstår att förändringen blir ganska mycket omedelbar.
En varning att vara medveten om är att under väntetiden på ett SCH-M
låser andra frågor blockeras istället för att hoppa över kön före det så kanske du vill överväga att lägga till ett SET LOCK_TIMEOUT
först.
Se också till att i ALTER TABLE
uttalande anger du uttryckligen NOT NULL
om det är det ursprungliga kolumntillståndet, annars ändras kolumnen så att NULL
.