sql >> Databáze >  >> RDS >> Sqlserver

Výkon SQL Serveru pro změnu datového typu změnit tabulku změnit sloupec

Shodou okolností jsem asi před 3 hodinami musel udělat něco velmi podobného. Stůl měl 35 m řádků, byl poměrně široký a trvalo věčnost, než se to povedlo:

alter table myTable add myNewColumn int not null default 0;

Zde je to, s čím jsem skončil:

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;

Tentokrát alter table prohlášení byla téměř okamžitá. Provedení aktualizačních dávek trvalo asi 7-8 minut (na pomalém serveru). Domnívám se, že SQL Server generoval v mém původním dotazu příkaz zpět, aby obnovil hodnoty, ale neočekával jsem, že to začne.

Každopádně ve vašem případě by možná pomohlo něco podobného. Můžete zkusit přidat nový bigintový sloupec, aktualizovat nový sloupec v dávkách a poté na něj nastavit omezení.



  1. Jak aktualizovat primární klíč

  2. PHP SQL:Jak ukládat data do více databází z jednoho html formuláře NEBO jak automaticky kopírovat data z jedné databáze do jiné databáze

  3. Jaká je kořenová chyba za Nepodařilo se navázat připojení k databázi. Zkontrolujte připojovací řetězec, uživatelské jméno a heslo.

  4. MySql - Problém tabulek na jiném serveru rozlišuje malá a velká písmena