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

SQL Server-ydeevne for at ændre tabel ændre kolonneændringsdatatype

Tilfældigvis var jeg nødt til at gøre noget meget lignende for omkring 3 timer siden. Bordet var på 35 m rækker, det er ret bredt, og det tog en evighed at bare gøre dette:

alter table myTable add myNewColumn int not null default 0;

Her er hvad jeg endte med at gå med:

alter table myTable add myNewColumn int null;

while 1=1
begin
    update top (100000) myTable
    set
        myNewColumn = 0
    where
        myNewColumn is null;

    if @@ROWCOUNT = 0 break;
end

alter table myTable alter column myNewColumn int not null;
alter table myTable add constraint tw_def_myNewColumn default (0) for myNewColumn;

Denne gang, alter table udtalelser var næsten øjeblikkelige. Det tog omkring 7-8 minutter (på en langsom server) at lave opdateringsbatches. Jeg spekulerer i, at SQL Server genererede fortryd i min oprindelige forespørgsel for at gendanne værdierne, men jeg forventede ikke, at det startede.

Uanset hvad, i dit tilfælde ville noget lignende måske hjælpe. Du kan prøve at tilføje en ny bigint-kolonne, opdatere den nye kolonne i batches og derefter indstille begrænsningerne for den.



  1. Oracle Create Table AS og tabelkommentarer og kolonnekommentarer

  2. Konvertering af en Postgresql-database fra SQL_ASCII, der indeholder blandede kodningstyper, til UTF-8

  3. Hvordan udføres to mysql-forespørgsler som én i PHP/MYSQL?

  4. syntaksfejl på DECLARE CURSOR FOR