2008-11-17 7 views
5

Mam pole (na przykład foo) w tabeli w bazie danych SQL Server, która została pierwotnie zdefiniowana jako zerowalna, ale nowe wymagania wskazują, że to pole musi mieć wartość inną niż null.Skrypt aktualizujący do aktualizowania pola tabeli w SQL Server z NULL na nie-NULL

Jaki jest najlepszy sposób aktualizacji tego pola na wartość inną niż null za pomocą skryptu aktualizacji bez usuwania zawartości tabeli? Próbowałem wygenerować skrypt z widoku projektu, ale nie udało się go wykonać, ponieważ bieżąca zawartość tabeli miała wartości NULL dla foo. Co gorsza, jeśli zignoruję ten błąd, przystąpi do usunięcia całej zawartości tabeli!

Odpowiedz

10

Musisz ustawić wartość dla dowolnych wierszy z NULL w kolumnie stanie NULL zanim zmienisz ją na NOT NULL.

-- Clean up the data which won't comply with the schema changes 
UPDATE t SET foo = 0 WHERE foo IS NULL 

-- Apply the NOT NULL 
ALTER TABLE t ALTER COLUMN foo int NOT NULL 

-- Add a default for the future if that's what you want 
ALTER TABLE t ADD CONSTRAINT t_foo_def DEFAULT 0 FOR foo 
0

Możesz ustawić wartość domyślną dla pola niepodlegającego zerowaniu. Jeśli chcesz zmienić ją z nullable na not-nullable, musisz podać wartość, którą można przypisać do wierszy z wartością pustą w tym polu.

Powiązane problemy