DEFAULT VALUES

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:

Post pierwotnie opublikowany jako TSQL na dziś #5

Dodaj komentarz