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.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *