Z dokumentacji technet ( http://technet.microsoft.com/en-us/library/ms189909%28v=sql.105%29.aspx )
„(…) When you load a row into a table with a DEFAULT definition for a column, you implicitly instruct the Database Engine to insert a default value in the column when a value is not specified for it.
You can also use the DEFAULT VALUES clause of the INSERT STATEMENT to explicitly instruct the Database Engine to insert a default value for a column. „
Jak wszyscy zapewne wiedzą, możliwe jest ustawienie każdej kolumnie jej wartości zdefiniowanych tzw defaultów. Dzięki temu, gdy podczas ładowania przyjdzie taki wiersz, który nie miał zdefiniowanej kolumny explicite (nie została ona wymieniona w instrukcji INSERT) zamiast wartości NULL wstawi się nam wartość domyślna. Istnieje jednak sposób by jawnie wyrazić chęć wstawienia w danym polu jego wartości domyślnej lub, co najciekawsze (i bardzo przydatne) wszystkich pól za jednym razem!
Na początek prosty przykład tabeli, dla której definiujemy dwa pola. Dodajemy trzy rekordy, z czego tylko dwa maja podane wartości dla drugiej kolumny, w trzecim rekordzie chcielibyśmy by dodał nam tylko wartość do kolumny pierwszej a do drugiej wstawił wartość domyślną:
CREATE TABLE #table ( col1 INT , col2 INT DEFAULT 666 ) INSERT INTO #table ( col1, col2 ) VALUES ( 1, 1 ), ( 2, 2 ), ( 3, DEFAULT ) SELECT * FROM #table DROP TABLE #table
Wynik:
To teraz bardziej wyszukany przykład.
Często sprawdzam różne rzeczy na dużych tabelach (np indeksy, operacje na danych etc).
Chciałbym wygenerowac sobie tabelę, która będzie zawierała jakieś randomowe dane. Jednym ze sposobów jest utworzenie jej z defualtami i uruchomieniem polecenia INSERT z opcja DEFUALT VALUES, które załaduje defaultowe dane za jednym razem do wszystkich kolumn, wykonam takiego inserta 1000 razy poprzez polecenie GO 1000 :
CREATE TABLE #table ( id INT IDENTITY PRIMARY KEY ,-- rosnie o 1 col1 INT DEFAULT RAND() * 1000 ,--random col2 DECIMAL(20, 4) DEFAULT RAND() * 100 ,--random col3 VARCHAR(MAX) DEFAULT REPLICATE(CAST(NEWID() AS VARCHAR(MAX)), 3)--randomowy string, zamieniam NEIWD na napis i powtarzam 3 razy zeby napis byl dluzszy (Szybciej zapelnil moja tebele) ) GO INSERT INTO #table DEFAULT VALUES GO 1000 SELECT * FROM #table DROP TABLE #table
Wynik: