Jeg har en MS SQL Server 2008 R2 DB-server for tiden i bruk med en produksjonsapp.
En ny forbedring av appen krever nå en varchar(100)
-kolonne i en tabell for å øke lengden.
Kan lengden på dette eksisterende kolonne i prod DB økes uten å påvirke gjeldende data?
Må denne endringen fullføres i åpentider for å unngå forstyrrelser i tjenesten?
Svar
Hvis du øker det til varchar(100 - 8000)
(dvs. noe annet enn varchar(max)
) og du gjør dette gjennom TSQL i stedet for SSMS GUI
ALTER TABLE YourTable ALTER COLUMN YourCol varchar(200) [NOT] NULL
og endrer ikke kolonnen nullitet fra NULL
til NOT NULL
( som vil låse tabellen mens alle radene er validert og potensielt skrevet til ) eller fra NOT NULL
til NULL
i noen tilfeller , så er dette en rask endring av metadataene. Det kan trenge å vente på en SCH-M
lås på bordet, men når det først er oppnådd at endringen vil være ganske mye øyeblikkelig.
En advarsel å være klar over er at i løpet av ventetiden til en SCH-M
låser andre spørsmål blir blokkerte i stedet for å hoppe køen foran den, så du vil kanskje vurdere å legge til en SET LOCK_TIMEOUT
først.
Sørg også for at ALTER TABLE
uttalelse spesifiserer du eksplisitt NOT NULL
hvis det er den opprinnelige kolonnetilstanden, ellers blir kolonnen endret for å tillate NULL
.