sql >> Database >  >> RDS >> Sqlserver

SQL Server-prestaties voor het wijzigen van de tabel wijzigen van het gegevenstype van de wijziging van de kolom

Toevallig moest ik ongeveer 3 uur geleden iets soortgelijks doen. De tafel was 35 meter lang, hij is redelijk breed en het duurde een eeuwigheid om dit gewoon te doen:

alter table myTable add myNewColumn int not null default 0;

Dit is waar ik uiteindelijk mee begon:

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;

Deze keer, de alter table verklaringen waren bijna onmiddellijk. Het duurde ongeveer 7-8 minuten (op een trage server) om de updatebatches uit te voeren. Ik speculeer dat SQL Server ongedaan maken genereerde in mijn oorspronkelijke query om de waarden te herstellen, maar dat had ik niet verwacht om te beginnen.

Hoe dan ook, in jouw geval zou iets soortgelijks misschien helpen. U kunt proberen een nieuwe bigint-kolom toe te voegen, de nieuwe kolom in batches bij te werken en vervolgens de beperkingen erop in te stellen.



  1. Hoe rijen te markeren als ze dubbele gegevens bevatten?

  2. Sla opgemaakte tekst op in de database en haal het terug 'zoals het is' als een opgemaakte string

  3. Combineer INSERT en SELECT in één SQL-query (Zapier)

  4. oracle ExecuteNonQuery loopt vast op ASP.Net