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.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *