sql >> Database teknologi >  >> RDS >> Sqlserver

Hvordan tilføjer du en NOT NULL-kolonne til en stor tabel i SQL Server?

Jeg løb også ind i dette problem for mit arbejde. Og min løsning er langs #2.

Her er mine trin (jeg bruger SQL Server 2005):

1) Tilføj kolonnen til tabellen med en standardværdi:

ALTER TABLE MyTable ADD MyColumn varchar(40) DEFAULT('')

2) Tilføj en NOT NULL begrænsning med NOCHECK mulighed. NOCHECK håndhæver ikke eksisterende værdier:

ALTER TABLE MyTable WITH NOCHECK
ADD CONSTRAINT MyColumn_NOTNULL CHECK (MyColumn IS NOT NULL)

3) Opdater værdierne trinvist i tabel:

GO
UPDATE TOP(3000) MyTable SET MyColumn = '' WHERE MyColumn IS NULL
GO 1000
  • Opdateringserklæringen vil kun opdatere maksimalt 3000 poster. Dette gør det muligt at gemme en del af data på det tidspunkt. Jeg er nødt til at bruge "MyColumn IS NULL", fordi min tabel ikke har en sekvens primærnøgle.

  • GO 1000 vil udføre den forrige sætning 1000 gange. Dette vil opdatere 3 millioner poster, hvis du har brug for flere, skal du bare øge dette antal. Den vil fortsætte med at køre, indtil SQL Server returnerer 0 poster for UPDATE-sætningen.



  1. EM12c tillader nu DB12c til Repos

  2. Vælg fra tabel, hvis posten findes i en anden tabel

  3. NLS_CHARSET_NAME() Funktion i Oracle

  4. Understøtter din Salesforce-driver massehandlinger?