Jak mogę dodać kolumnę z wartością domyślną do istniejącej tabeli w SQL Server 2000 / SQL Server 2005 ?
2764
Jak mogę dodać kolumnę z wartością domyślną do istniejącej tabeli w SQL Server 2000 / SQL Server 2005 ?
Odpowiedzi:
Składnia:
Przykład:
Uwagi:
Opcjonalna nazwa ograniczenia: w
przypadku
CONSTRAINT D_SomeTable_SomeCol
pominięciaprogram SQL Server automatycznie wygeneruje ograniczenie domyślne ze śmieszną nazwą, taką jak:
DF__SomeTa__SomeC__4FB7FEF6
Opcjonalnie Oświadczenie wartościach: jest potrzebna, gdy kolumna jest Nullable tylko i chcesz domyślna wartość używana do istniejących rekordów. Jeśli twoja kolumna jest , wówczas automatycznie użyje wartości domyślnej dla wszystkich istniejących rekordów, niezależnie od tego, czy podasz tę wartość, czy nie.
WITH VALUES
NOT NULL
WITH VALUES
Jak praca Wstawki z domyślnym-constraint:
Po włożeniu do rekordu
SomeTable
i czy nie OkreślSomeCol
„s wartość, to będzie domyślnie0
.Jeśli wstawić rekord i określ
SomeCol
„s wartość jakoNULL
(a kolumna pozwala null),a następnie Default-Ograniczenie będzie nie być używany i
NULL
zostanie wstawiony jako wartość.Notatki oparto na świetnych opiniach wszystkich poniżej.
Specjalne podziękowania dla:
@Yatrix, @WalterStabosz, @YahooSerious i @StackMan za komentarze.
źródło
NOT NULL
. Spróbuj tego:create table blah(a int not null primary key clustered); insert blah values (1), (2); alter table blah add b int null constraint df_blah_b default (0); select * from blah;
Zobaczysz 2 wartości NULL dla kolumnyb
.WITH VALUES
do aktualizowania istniejących zerowalnych wierszy. Patrz MSDN : „Jeśli dodana kolumna dopuszcza wartości zerowe iWITH VALUES
jest określona, wartość domyślna jest zapisywana w nowej kolumnie, dodawanej do istniejących wierszy.”Włączenie DOMYŚLNE wypełnia kolumnę w istniejących wierszach wartością domyślną, więc ograniczenie NOT NULL nie zostanie naruszone.
źródło
Dodając kolumnę zerowalną ,
WITH VALUES
upewni się, że do istniejących wierszy zostanie zastosowana określona wartość DOMYŚLNA:źródło
DEFAULT
ograniczeniem zawsze będzie miała wartość - to znaczy nie będzie NULL, nawet jeśliNOT NULL
nie jest określona.BIT
danych, mówiłem o tej konkretnejBIT
kolumnie . Spójrz na odpowiedź, kolumna jest zadeklarowana jakoNOT NULL
.źródło
źródło
Uważaj, gdy dodawana kolumna ma
NOT NULL
ograniczenie, ale nie maDEFAULT
ograniczenia (wartości). WALTER TABLE
takim przypadku instrukcja zakończy się niepowodzeniem, jeśli tabela zawiera wiersze. Rozwiązaniem jest albo usunięcieNOT NULL
ograniczenia z nowej kolumny, albo zapewnienieDEFAULT
dla niego ograniczenia.źródło
Najbardziej podstawowa wersja z tylko dwiema liniami
źródło
Posługiwać się:
źródło
Jeśli chcesz dodać wiele kolumn, możesz to zrobić na przykład:
źródło
Posługiwać się:
Odniesienie: ALTER TABLE (Transact-SQL) (MSDN)
źródło
Aby dodać kolumnę do istniejącej tabeli bazy danych z wartością domyślną, możemy użyć:
Oto inny sposób dodania kolumny do istniejącej tabeli bazy danych z wartością domyślną.
O wiele dokładniejszy skrypt SQL służący do dodawania kolumny z wartością domyślną znajduje się poniżej, w tym sprawdzenie, czy kolumna istnieje przed dodaniem jej, także sprawdzenie ograniczenia i usunięcie go, jeśli taki istnieje. Ten skrypt nazywa również ograniczenie, dzięki czemu możemy mieć przyjemną konwencję nazewnictwa (lubię DF_), a jeśli nie, SQL da nam ograniczenie o nazwie, która ma losowo wygenerowaną liczbę; więc miło jest móc nazwać ograniczenie.
Są dwa sposoby dodania kolumny do istniejącej tabeli bazy danych z wartością domyślną.
źródło
Możesz to zrobić za pomocą T-SQL w następujący sposób.
Oprócz korzystania z SQL Server Management Studio można także kliknąć prawym przyciskiem myszy tabelę w menu Projekt, ustawiając wartość domyślną na tabelę.
Ponadto, jeśli chcesz dodać tę samą kolumnę (jeśli nie istnieje) do wszystkich tabel w bazie danych, użyj:
źródło
W SQL Server 2008-R2 przechodzę do trybu projektowania - w testowej bazie danych - i dodaję dwie kolumny za pomocą projektanta i dokonałem ustawień za pomocą GUI, a następnie niesławny Right-Clickdaje opcję „ Generuj skrypt zmian ”!
Bang up wyskakuje małe okno, jak się domyślacie, odpowiednio sformatowany skrypt zmiany gwarantowanej do pracy. Naciśnij łatwy przycisk.
źródło
Możesz też dodać wartość domyślną bez konieczności jawnego nazwania ograniczenia:
Jeśli masz problem z istniejącymi ograniczeniami domyślnymi podczas tworzenia tego ograniczenia, możesz je usunąć:
źródło
Można to zrobić również w graficznym interfejsie SSMS. Poniżej pokazuję domyślną datę, ale wartość domyślna może oczywiście być dowolna.
(getdate())
lubabc
lub0
inną wartość, którą chcesz w polu Wartość domyślna lub Powiązanie, jak pokazano poniżej:źródło
Artykuł MSDN ALTER TABLE (Transact-SQL) zawiera całą składnię tabeli zmian.
źródło
Przykład:
źródło
Przykład:
źródło
Najpierw utwórz tabelę z imieniem uczeń:
Dodaj do niej jedną kolumnę:
Tabela zostanie utworzona, a kolumna zostanie dodana do istniejącej tabeli z wartością domyślną.
źródło
To daje wiele odpowiedzi, ale czuję potrzebę dodania tej rozszerzonej metody. Wydaje się to znacznie dłuższe, ale jest niezwykle przydatne, jeśli dodajesz pole NOT NULL do tabeli z milionami wierszy w aktywnej bazie danych.
W ten sposób dodasz kolumnę jako pole zerowalne i przy wartości domyślnej zaktualizujesz wszystkie pola do wartości domyślnej (lub możesz przypisać bardziej znaczące wartości), a na koniec zmieni kolumnę na NIE NULL.
Powodem tego jest to, że jeśli zaktualizujesz tabelę na dużą skalę i dodasz nowe niepuste pole, musi ono zapisać w każdym wierszu, a tym samym zablokuje całą tabelę podczas dodawania kolumny, a następnie zapisywania wszystkich wartości.
Ta metoda doda kolumnę zerowalną, która sama działa o wiele szybciej, a następnie wypełni dane przed ustawieniem statusu różnego od zera.
Przekonałem się, że zrobienie wszystkiego w jednym oświadczeniu zablokuje jedną z naszych bardziej aktywnych tabel na 4-8 minut i dość często zabijałem ten proces. Ta metoda zazwyczaj zajmuje tylko kilka sekund i powoduje minimalne blokowanie.
Ponadto, jeśli masz tabelę w obszarze miliardów wierszy, warto podzielić ją na części tak:
źródło
Spróbuj tego
źródło
SQL Server + Zmień tabelę + Dodaj kolumnę + Unikalny identyfikator wartości domyślnej
źródło
źródło
NOT EXISTS
czek przed próbą zmiany tabeli. Bardzo dobre rozwiązanie. Dodatkowe komentarze na temat tego, jak to działa, uczynią go jeszcze bardziej przydatnym.źródło
Dodaj nową kolumnę do tabeli:
Na przykład,
Jeśli użytkownik chce ustawić automatyczne zwiększanie, wówczas:
źródło
To jest dla SQL Server:
Przykład:
Jeśli chcesz dodać ograniczenia, to:
źródło
Można to zrobić za pomocą poniższego kodu.
źródło
Wypróbuj poniższe zapytanie:
Spowoduje to dodanie nowej kolumny do tabeli.
źródło
Z tego zapytania możesz dodać kolumnę liczb całkowitych typu danych o wartości domyślnej 0.
źródło
Cóż, mam teraz modyfikację mojej poprzedniej odpowiedzi. Zauważyłem, że żadna z wymienionych odpowiedzi nie została wymieniona
IF NOT EXISTS
. Zamierzam więc przedstawić nowe rozwiązanie tego problemu, ponieważ miałem problemy z modyfikacją tabeli.Oto
TaskSheet
konkretna nazwa tabeli iIsBilledToClient
nowa kolumna, którą zamierzasz wstawić, oraz1
wartość domyślna. Oznacza to w nowej kolumnie, jaka będzie wartość istniejących wierszy, dlatego jeden zostanie tam ustawiony automatycznie. Możesz jednak dowolnie zmieniać, uwzględniając typ kolumny, tak jak jaBIT
, więc ustawiłem wartość domyślną 1.Sugeruję powyższy system, ponieważ napotkałem problem. Więc jaki jest problem? Problem polega na tym, że jeśli
IsBilledToClient
kolumna istnieje w tabeli, to jeśli wykonasz tylko część kodu podaną poniżej, zobaczysz błąd w kreatorze zapytań serwera SQL. Ale jeśli nie istnieje, to po raz pierwszy nie będzie błędu podczas wykonywania.źródło