Di recente ho aggiunto una colonna di bit in grado NULL a una tabella che ha quasi 500 milioni di righe. Non c'è un valore predefinito nella colonna, tuttavia tutti gli inserti specificano un valore pari a 0 o 1 e ho eseguito una routine una tantum per assegnare 0 o 1 a tutte le righe esistenti (aggiornando le righe in piccoli lotti). Ogni riga dovrebbe ora avere uno 0 o 1 in quella colonna.
Voglio rendere la colonna di bit non annullabile tuttavia quando ho provato a farlo tramite ALTER TABLE t1 ALTER COLUMN c1 bit not null
, ha iniziato a funzionare per 3 minuti e l'ho interrotta perché stava bloccando tutte le letture al tavolo e sospettavo che ci sarebbe voluto molto tempo per il completamento . È possibile che non ci vorrebbe troppo tempo ma non potrei rischiare troppa indisponibilità. Il rollback stesso ha richiesto 6 minuti.
Hai qualche suggerimento su come posso rendere la colonna non annullabile senza che il completamento richieda potenzialmente ore? Inoltre, esiste un modo per stimare quanto tempo ALTER TABLE ALTER COLUMN
richiederebbe il completamento dell'istruzione che ho iniziato e poi annullato?
Sto usando SQL Server 2017 Web Edition.
SELECT c1, count(*) FROM t1 GROUP BY c1
che ha richiesto circa 9 minuti. Il completamento dellaALTER TABLE ALTER COLUMN
dichiarazione vera e propria ha richiesto 25 minuti. Non male.