CREATE TABLE (Transact-SQL)

Składnia

CREATE TABLE 
    [ database_name . [ schema_name ] . | schema_name . ] table_name 
    ( { <column_definition> | <computed_column_definition> 
        | <column_set_definition> }
        [ <table_constraint> ] [ ,...n ] ) 
    [ ON { partition_scheme_name ( partition_column_name ) | filegroup 
        | "default" } ] 
    [ { TEXTIMAGE_ON { filegroup | "default" } ] 
    [ FILESTREAM_ON { partition_scheme_name | filegroup 
        | "default" } ]
    [ WITH ( <table_option> [ ,...n ] ) ]
[ ; ]

<column_definition> ::=
column_name <data_type>
    [ FILESTREAM ]
    [ COLLATE collation_name ] 
    [ NULL | NOT NULL ]
    [ 
        [ CONSTRAINT constraint_name ] DEFAULT constant_expression ] 
      | [ IDENTITY [ ( seed ,increment ) ] [ NOT FOR REPLICATION ] 
    ]
    [ ROWGUIDCOL ] [ <column_constraint> [ ...n ] ] 
    [ SPARSE ] 

<data type> ::= 
[ type_schema_name . ] type_name 
    [ ( precision [ , scale ] | max | 
        [ { CONTENT | DOCUMENT } ] xml_schema_collection ) ] 

<column_constraint> ::= 
[ CONSTRAINT constraint_name ] 
{     { PRIMARY KEY | UNIQUE } 
        [ CLUSTERED | NONCLUSTERED ] 
        [ 
            WITH FILLFACTOR = fillfactor  
          | WITH ( < index_option > [ , ...n ] ) 
        ] 
        [ ON { partition_scheme_name ( partition_column_name ) 
            | filegroup | "default" } ]
  | [ FOREIGN KEY ] 
        REFERENCES [ schema_name . ] referenced_table_name [ ( ref_column ) ] 
        [ ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ] 
        [ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ] 
        [ NOT FOR REPLICATION ] 
  | CHECK [ NOT FOR REPLICATION ] ( logical_expression ) 
} 

<computed_column_definition> ::=
column_name AS computed_column_expression 
[ PERSISTED [ NOT NULL ] ]
[ 
    [ CONSTRAINT constraint_name ]
    { PRIMARY KEY | UNIQUE }
        [ CLUSTERED | NONCLUSTERED ]
        [ 
            WITH FILLFACTOR = fillfactor 
          | WITH ( <index_option> [ , ...n ] )
        ]
    | [ FOREIGN KEY ] 
        REFERENCES referenced_table_name [ ( ref_column ) ] 
        [ ON DELETE { NO ACTION | CASCADE } ] 
        [ ON UPDATE { NO ACTION } ] 
        [ NOT FOR REPLICATION ] 
    | CHECK [ NOT FOR REPLICATION ] ( logical_expression ) 
    [ ON { partition_scheme_name ( partition_column_name ) 
        | filegroup | "default" } ]
] 

<column_set_definition> ::=
column_set_name XML COLUMN_SET FOR ALL_SPARSE_COLUMNS

< table_constraint > ::=
[ CONSTRAINT constraint_name ] 
{ 
    { PRIMARY KEY | UNIQUE } 
        [ CLUSTERED | NONCLUSTERED ] 
        (column [ ASC | DESC ] [ ,...n ] ) 
        [ 
            WITH FILLFACTOR = fillfactor 
           |WITH ( <index_option> [ , ...n ] ) 
        ]
        [ ON { partition_scheme_name (partition_column_name)
            | filegroup | "default" } ] 
    | FOREIGN KEY 
        ( column [ ,...n ] ) 
        REFERENCES referenced_table_name [ ( ref_column [ ,...n ] ) ] 
        [ ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ] 
        [ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ] 
        [ NOT FOR REPLICATION ] 
    | CHECK [ NOT FOR REPLICATION ] ( logical_expression ) 
} 
<table_option> ::=
{
    DATA_COMPRESSION = { NONE | ROW | PAGE }
      [ ON PARTITIONS ( { <partition_number_expression> | <range> } 
      [ , ...n ] ) ]
}

<index_option> ::=
{ 
    PAD_INDEX = { ON | OFF } 
  | FILLFACTOR = fillfactor 
  | IGNORE_DUP_KEY = { ON | OFF } 
  | STATISTICS_NORECOMPUTE = { ON | OFF } 
  | ALLOW_ROW_LOCKS = { ON | OFF} 
  | ALLOW_PAGE_LOCKS ={ ON | OFF} 
  | DATA_COMPRESSION = { NONE | ROW | PAGE }
       [ ON PARTITIONS ( { <partition_number_expression> | <range> } 
       [ , ...n ] ) ]
}
<range> ::= 
<partition_number_expression> TO <partition_number_expression>

Argumenty

  • database_name
    Jest to nazwa bazy danych, tworzenia tabela .database_namenależy określić nazwę istniejącej bazy danych.Jeśli nie określono database_name Ustawienia domyślne do bieżącej bazy danych.Identyfikator logowania dla bieżącego połączenia muszą być skojarzone z dotychczasowej nazwy użytkownika w bazie danych określony przez database_name, i ta nazwa użytkownika musi mieć uprawnienia CREATE TABLE.

  • schema_name
    Jest to nazwa schematu, do której należy dany nowej tabela .

  • table_name
    Jest to nazwa nowej tabela.Nazwy tabel muszą spełniać zasady dla identyfikatorów.table_namemoże zawierać maksymalnie 128 znaków, z wyjątkiem nazw lokalnych tymczasowej tabela (nazwy rozpoczynające się od pojedynczy znak numeru (#)), które nie może przekraczać 116 znaków.

  • column_name
    Jest to nazwa kolumna w tabela.Nazwy kolumn muszą spełniać zasady dla identyfikatorów i muszą być unikatowe w tabela.column_namemoże zawierać maksymalnie 128 znaków.column_name można pominąć dla kolumn, które są tworzone z timestamp typu danych.Jeśli column_name nie jest określony, nazwa timestampdomyślnekolumna do timestamp.

  • computed_column_expression
    To wyrażenie , które definiuje wartość kolumnaobliczanej.Obliczanej kolumna jest wirtualny kolumna , która nie jest fizycznie przechowywane w tabela, chyba że kolumna jest oznaczona jako PERSISTED.kolumna jest obliczana z wyrażenie , który korzysta z innych kolumn w tej samej tabela.Na przykład, obliczanej kolumna może mieć definicji: cost AS price * qty.wyrażenie może być nazwa noncomputed kolumna , stała, funkcja, zmienna i dowolnej kombinacji tych połączonych przez jeden lub więcej operatorów.wyrażenie nie może być podzapytanie lub zawierają typy danych alias .

    Kolumny obliczane mogą być używane w listach select, klauzule WHERE, klauzul ORDER BY lub inne lokalizacje, w których wyrażenia regularne mogą być używane, z następującymi wyjątkami:

    • Nie można użyć kolumna obliczanej jako domyślny lub klucz OBCY definicji ograniczenia lub z definicji ograniczenia NOT NULL.Jednakże, obliczanej kolumna może służyć jako klucz kolumna w indeksie lub jako część wszelkie ograniczenia na klucz podstawowy lub unikatowe wartości obliczanej kolumna jest zdefiniowane przez firmy Deterministic Networks wyrażenie i typu danych wyniku jest dozwolony w kolumny indeksu.

      Na przykład, jeśli tabela zawiera kolumny całkowitą i b, obliczane kolumna + b mogą być indeksowane, ale obliczane kolumna + DATEPART (dd-GETDATE()) nie mogą być indeksowane, ponieważ wartość może się zmieniać w kolejnych wywołania.

    • kolumna obliczana nie może być miejsce docelowe INSERT lub UPDATE instrukcja.

    Ostrzeżenie

    Każdy wiersz w tabela może mieć różne wartości dla kolumn, które są zaangażowane w obliczanej kolumna; w związku z tym, obliczanej kolumna nie może mieć tę samą wartość dla każdego wiersza.

    Oparte na wyrażeniach, które są używane, opcje dopuszczania wartości null z kolumny obliczane jest określana automatycznie przez Aparat baz danych.Wynik wyrażenia większości uznaje nullable nawet wtedy, gdy tylko nonnullable kolumny są obecne, ponieważ możliwe niedopełnienie lub dłuższa również wygenerować NULL wyniki.Użyj funkcja COLUMNPROPERTY z AllowsNull właściwość zbadanie opcje dopuszczania wartości null wszelkich obliczane kolumna w tabela.wyrażenie , które jest nullable mogą być uwzględniane w jeden nonnullable przez określenie ISNULL z check_expressionstała, gdzie stała jest niepustych wartości zastępują wszelkie wynik NULL. Uprawnienie odwołania typu jest wymagane dla kolumny obliczanej oparte na wyrażeniach typ zdefiniowany przez użytkownika runtime (CLR) języka wspólnego.

  • UTRWALONE
    Określa, że Aparat baz danych programu SQL Server będzie fizycznie przechowywania obliczonych wartości w tabelai zaktualizować wartości po zaktualizowaniu innych kolumn, od których zależy kolumna obliczanej.Oznaczanie kolumna obliczanej jako PERSISTED pozwala utworzyć indeks dla obliczanej kolumna firmy Deterministic Networks, ale nie dokładne.Aby uzyskać więcej informacji, zobacz Tworzenie indeksów kolumny obliczanej.Kolumny obliczane, które są używane jako partycjonowanie kolumny tabela partycjonowana muszą być wyraźnie oznakowane PERSISTED.computed_column_expressionmusi być deterministyczny, gdy określono PERSISTED.

  • NA { <partition_scheme> | filegroup | "default" }
    Określa schemat partycji lub grupa plików , na którym jest przechowywany w tabela .Jeśli <partition_scheme> jest określona tabela ma być tabela partycjonowana partycji, których są przechowywane na zestaw jedną lub więcej aplikacjami określone w <partition_scheme>.Jeśli filegroup jest określona tabela jest przechowywana w nazwie grupa plików.grupa plików musi znajdować się wewnątrz bazy danych.Jeśli "domyślną" jest określony, lub jeśli w ogóle nie jest określony, tabela jest przechowywana w domyślnej grupa plików.Mechanizm magazynowania tabela , jak określono w tworzenie tabeli nie może być później zmieniona.

    NA {<partition_scheme> | filegroup | "domyślną"} można również określić w klucz podstawowy lub unikatowe ograniczenie.Ograniczenia te należy utworzyć indeksy.Jeśli filegroup jest określony indeks jest przechowywany w nazwie grupa plików.Jeśli "domyślną" jest określony, lub jeśli w ogóle nie jest określony, indeks jest przechowywany w tej samej grupa plików jako tabela.Jeśli klucz podstawowy lub ograniczenie UNIQUE tworzy indeks klastrowany, strony danych dla tabela są przechowywane w tej samej grupa plików jako indeks.Jeśli określono CLUSTERED lub inaczej ograniczenie tworzy indeks klastrowany, a <partition_scheme> jest określony, który różni się od <partition_scheme> lub filegroup definicji tabela , lub odwrotnie, tylko definicji ograniczenia będą honorowane i innych zostanie zignorowana.

    Ostrzeżenie

    W tym kontekście domyślnie nie jest słowem kluczowym.Jest to identyfikator domyślnej grupa plików i musi być rozdzielany w sprawie "domyślną" lub na domyślne[].Jeśli "domyślną" jest określona opcja QUOTED_IDENTIFIER musi być w bieżącej sesja.Jest to ustawienie domyślne.Aby uzyskać więcej informacji, zobacz ZESTAW QUOTED_IDENTIFIER (Transact-SQL).

    Ostrzeżenie

    Po utworzeniu tabela partycjonowana, należy rozważyć ustawienie dla opcji LOCK_ESCALATION dla tabela AUTOMATYCZNIE.Może to poprawić współbieżność przez włączenie blokady eskalować partycji (HoBT) poziom zamiast tabelaAby uzyskać więcej informacji, zobacz ALTER TABLE (Transact-SQL).

  • TEXTIMAGE_ON { filegroup| "default" }
    Słowa kluczowe, które wskazują, które są text, ntext, image, xml, varchar(max), nvarchar(max), varbinary(max), i zdefiniowany przez użytkownika typ CLR kolumny są przechowywane w określonej grupa plików.

    TEXTIMAGE_ON nie jest dozwolone, jeśli w tabelanie istnieją żadne kolumny dużą wartość.TEXTIMAGE_ON nie może być określony, jeśli <partition_scheme> jest określony.Jeśli "domyślną" jest określony, lub jeśli TEXTIMAGE_ON nie jest określony w ogóle, duża wartość kolumny są przechowywane w domyślnej grupa plików.Magazyn danych kolumna dużą wartość określona w CREATE TABLE nie może być później zmieniona.

    Ostrzeżenie

    W tym kontekście domyślnie nie jest słowem kluczowym.Jest to identyfikator domyślnej grupa plików i musi być rozdzielane w TEXTIMAGE_ON "domyślne" lub TEXTIMAGE_ON domyślne[].Jeśli "domyślną" jest określona opcja QUOTED_IDENTIFIER musi być w bieżącej sesja.Jest to ustawienie domyślne.Aby uzyskać więcej informacji, zobacz ZESTAW QUOTED_IDENTIFIER (Transact-SQL).

  • FILESTREAM_ON { partition_scheme_name | grupa plików | "default" }
    Określa grupa plików danych FILESTREAM.

    Jeśli tabela zawiera dane FILESTREAM i tabela jest podzielony na partycje, FILESTREAM_ON klauzula muszą być włączone i należy określić schemat partycji aplikacjami FILESTREAM.Ten schemat partycji muszą używać tej samej partycji funkcja i partycji kolumn jako schemat partycji dla tabela; w przeciwnym razie powstaje błąd.

    Jeśli tabela nie jest podzielony na partycje, FILESTREAM kolumna nie można podzielić na partycje.FILESTREAM danych dla tabela muszą być przechowywane w jednej grupa plików.Ta grupa plików jest określona w FILESTREAM_ON klauzula.

    Jeśli tabela nie jest podzielony na partycje i FILESTREAM_ON klauzula nie jest określony, jest używana FILESTREAM grupa plików , zawierającą właściwośćdomyślnezestaw . Jeśli nie ma żadnych FILESTREAM grupa plików, błąd zostanie zaokrąglona.

    • Tak jak w przypadku na i TEXTIMAGE_ON wartości zestaw przy użyciu CREATE TABLE dla FILESTREAM_ON nie można zmienić, z wyjątkiem następujących przypadków:

    • A CREATE INDEX instrukcja konwertuje sterty w indeks klastrowany.W tym przypadekmożna określić różne FILESTREAM grupa plików, schemat partycjilub wartość NULL.

    • A DROP INDEKSU instrukcja konwertuje indeks klastrowany na sterty.W tym przypadekFILESTREAM inną grupa plików, schemat partycjilub "domyślną" może być określony.

    grupa plików w FILESTREAM_ON <grupa plików>klauzulalub każdego FILESTREAM grupa plików o nazwie schemat partycjimusi mieć jeden plik zdefiniowane dla grupa plików. Ten plik musi być zdefiniowana za pomocą Tworzenie bazy danych lub ALTER DATABASE instrukcja; w przeciwnym razie powstaje błąd.

    Aby Tematy pokrewne FILESTREAM, zobacz Projektowanie i wdrażanie FILESTREAM magazynu.

  • [ type_schema_name**.** ] type_name
    Określa typ danych kolumnai schematu, do której należy.Typ danych może być jedną z następujących czynności:

    • Systemowy typ danych.

    • Na podstawie typu alias SQL Server typu danych systemu.Alias typy danych są tworzone z typu tworzenie instrukcja można było korzystać w definicji tabela .Wartość NULL lub nie przypisania wartości NULL dla typu danych alias można zastąpić podczas instrukcjaCREATE TABLE.Jednak nie można zmienić specyfikacji długości; nie można określić długość dla typu danych alias w instrukcjaCREATE TABLE.

    • zdefiniowany przez użytkownika typ CLR.Typy zdefiniowane przez użytkownika CLR są tworzone z typu tworzenie instrukcja można było korzystać w definicji tabela .Aby utworzyć kolumna zdefiniowany przez użytkownika typ CLR, wymagane jest uprawnienie odwołania typu.

    Jeśli type_schema_name nie jest określony, Aparat baz danych programu SQL Server odniesienia type_name w następującej kolejności:

    • SQL Server Typu danych systemu.

    • Domyślny schemat bieżącego użytkownika w bieżącej bazie danych.

    • Dbo schematu w bieżącej bazie danych.

  • precision
    Jest dokładność określony typ danych.Aby uzyskać więcej informacji na temat precyzji prawidłowe wartości, zobacz precyzja, skala i długość.

  • scale
    Jest skala określony typ danych.Aby uzyskać więcej informacji na temat skali prawidłowe wartości, zobacz precyzja, skala i długość.

  • MAX
    Stosuje się tylko do varchar, nvarchar, i varbinary typów danych do przechowywania 2 ^ 31 bajtów na znak i danych binarnych oraz 2 ^ 30 bajtów danych Unicode.

  • ZAWARTOŚĆ
    Określa, że każde wystąpienie xml Typ danych w column_name może zawierać wiele góry -poziom elementów.ZAWARTOŚĆ dotyczy wyłącznie xml danych wpisz i może być określony tylko wtedy, gdy xml_schema_collection określony jest również.Jeśli nie określono jest zachowanie domyślne.

  • DOKUMENT
    Określa, że każde wystąpienie xml Typ danych w column_name może zawierać tylko jeden górny -poziom elementu.DOKUMENT dotyczy wyłącznie xml danych wpisz i może być określony tylko wtedy, gdy xml_schema_collection określony jest również.

  • xml_schema_collection
    Dotyczy wyłącznie xml Typ danych do kojarzenia schematu XML kolekcja z typu.Przed wpisaniem xml kolumna do schematu, schematu należy najpierw utworzyć w bazie danych za pomocą Utworzyć KOLEKCJI SCHEMATU XML.

  • DOMYŚLNE
    Określa wartość podana dla kolumna , gdy wartość nie jest jawnie podany podczas wstawiania.Definicje domyślne mogą być stosowane do żadnych kolumn, z wyjątkiem tych określonych jako timestamp, lub tych, których właściwośćIDENTITY.Jeżeli określono wartość domyślną dla typ zdefiniowany przez użytkownika kolumna, typ, powinien obsługiwać niejawna konwersja z constant_expression do typ zdefiniowany przez użytkownika.Definicje domyślne są usuwane po upuszczeniu tabela .Tylko wartość stała , takich jak znak ciąg; wartość skalarnafunkcja (systemu przez użytkownika lub funkcja CLR); lub wartość NULL może być używany jako domyślny.Aby zachować zgodność ze starszymi wersjami programu SQL Server, nazwa ograniczenia mogą być przypisane do DOMYŚLNYCH.

  • constant_expression
    Jest stała, NULL lub systemu funkcja , która jest używana jako wartość domyślna dla kolumna.

  • TOŻSAMOŚĆ
    Wskazuje, że nowa kolumna jest kolumnatożsamooci.Podczas dodawania nowego wiersza do tabela Aparat baz danych zawiera unikatowy, przyrostowych wartości dla kolumna.Kolumny identyfikacji są zazwyczaj używane z ograniczeń klucza podstawowego służyć jako identyfikator unikatowy wiersz tabela.Identyfikacja właściwość można przypisać do tinyint, smallint, int, bigint, decimal(p,0), lub numeric(p,0) kolumny.tabelamożna utworzyć tylko jedną kolumna .Domyślne powiązania i ograniczeń DOMYŚLNEJ nie można używać z kolumna.Należy określić zarówno materiału siewnego i przyrostu lub żadna.Jeśli zostanie podana żadna wartość domyślna to (1,1).

  • seed
    Wartość używana dla bardzo pierwszy wiersz jest ładowany do tabela.

  • increment
    Jest ładowany pierwotnych wartości dodanej do wartości tożsamości poprzedniego wiersza.

  • NIE DLA REPLIKACJI
    W tworzenie tabeli instrukcjanie dla replikacji klauzula można określić właściwośćtożsamości, ograniczenia klucza OBCEGO i ograniczeń CHECK.Tej klauzula jest określony dla właściwośćtożsamości, wartości są nie zwiększane w kolumnach tożsamości podczas replikacja agentów wykonać wstawia.Jeżeli określono tę klauzula ograniczenia, ograniczenia nie są wymuszane podczas replikacja agentów wykonać Wstaw, zaktualizować lub usunąć operacje.Aby uzyskać więcej informacji, zobacz Kontrolowanie ograniczenia, tożsamości i wyzwalaczy z nie dla replikacji.

  • ROWGUIDCOL
    Wskazuje, że nowa kolumna jest wiersz GUID kolumna.Tylko jeden uniqueidentifier kolumna w tabela może być wyznaczony jako ROWGUIDCOL kolumna.Stosowanie ROWGUIDCOL właściwość umożliwia kolumna odwoływać się przy użyciu $ROWGUID.ROWGUIDCOL właściwość można przypisać tylko do uniqueidentifier kolumna.Słowo kluczowe ROWGUIDCOL jest nieprawidłowa, jeśli zgodności bazy danych poziom wynosi 65 lub niższym.Aby uzyskać więcej informacji, zobacz sp_dbcmptlevel (języka Transact-SQL).Kolumny Typ danych zdefiniowany przez użytkownika nie może być wyznaczony z ROWGUIDCOL.

    właściwość ROWGUIDCOL nie wymusza unikatowość wartości przechowywane w kolumna.ROWGUIDCOL również nie generuje automatycznie wartości nowe wiersze wstawione do tabela.Aby generować unikatowe wartości dla każdej kolumna, albo użyć NEWID lub NEWSEQUENTIALID funkcja na WSTAW instrukcji lub korzystania z tych funkcji jako domyślną dla kolumna.

  • ROZRZEDZONY
    Wskazuje, że kolumna jest rozrzedzony kolumna.Magazyn sparse kolumny jest zoptymalizowany dla wartości null .Sparse kolumny nie wyznaczone jako NOT NULL.Dodatkowe ograniczenia oraz więcej informacji o kolumnach sparse zobacz Przy użyciu kolumn Sparse.

  • FILESTREAM
    Prawidłowe tylko dla varbinary(max) kolumny.Określa magazyn FILESTREAM varbinary(max) obiektu BLOB danych.

    tabela musi mieć również kolumna z uniqueidentifier Typ danych, który ma atrybutROWGUIDCOL.W tej kolumna nie zezwalaj na wartooci null i musi mieć unikatowy albo klucz podstawowy jedno -kolumna ograniczenie.Wartość identyfikatora GUID dla kolumna muszą być dostarczone przez applicationwhen wstawiania danych lub przez ograniczenie DOMYOLNE, () NEWID funkcja.

    ROWGUIDCOL kolumna nie zostanie usunięty, a ograniczenia pokrewne nie można zmienić, gdy istnieje FILESTREAM kolumna zdefiniowanych dla tabela.ROWGUIDCOL kolumna można upuszczać tylko po przerwaniu FILESTREAM ostatniej kolumna .

    Podczas składowania FILESTREAM atrybut jest określony dla kolumna, wszystkie wartości w tej kolumna są przechowywane w danych FILESTREAM kontener w systemie plików.

  • SORTOWANIEcollation_name
    Określa sortowanie dla kolumna.Nazwa sortowania może być nazwa sortowanie systemu Windows lub nazwasortowanie SQL. collation_namema zastosowanie tylko do kolumn char, varchar, text, nchar, nvarchar, i ntext typów danych.Jeśli nie określono kolumna jest przypisywana do sortowanie typu danych zdefiniowanego przez użytkownika, jeśli kolumna ma typ danych zdefiniowany przez użytkownika lub domyślną sortowanie bazy danych.

    Aby uzyskać więcej informacji o nazwachsortowanie systemu Windows i SQL, zobacz Nazwa sortowania systemu Windows i SQL Collation nazwę.

    Aby uzyskać więcej informacji o klauzulaCOLLATE, zobacz SORTOWANIE (Transact-SQL).

  • OGRANICZENIA
    Jest opcjonalne słowa kluczowego, które oznacza rozpoczęcie definicji ograniczenie na klucz podstawowy, nie NULL, unikatowy, klucz OBCY lub wyboru.Aby uzyskać więcej informacji, zobacz Ograniczenia.

  • constraint_name
    Jest to nazwa ograniczenia.Warunek ograniczający nazwy muszą być unikatowe w schemacie, do którego należy tabela .

  • NULL | NIEDOZWOLONE WARTOŚCI NULL
    Określ, czy dozwolone są wartości null w kolumna.Wartość NULL nie jest ściśle ograniczenie, ale można określić tak samo jak NOT NULL.NIE można określić wartość NULL dla kolumny obliczanej, tylko wtedy, gdy określony jest również PERSISTED.

  • KLUCZ PODSTAWOWY
    To ograniczenie wymusza obiekt integralność dla określonej kolumna lub kolumn do indeks unikatowy.Mogą być tworzone tylko jedno ograniczenie klucza podstawowego tabela.

  • UNIKATOWE
    To ograniczenie, które zapewnia obiekt integralność dla określonej kolumna lub kolumn do indeks unikatowy.tabela może mieć wiele ograniczeń UNIQUE.

  • KLASTROWANE | NIEKLASTROWANY
    Wskazać klastrowany lub indeks nieklastrowany jest tworzony dla ograniczenia na klucz podstawowy lub unikatowe.Domyślnie ograniczeń klucza podstawowego CLUSTERED i domyślne ograniczenie typu UNIQUE do NONCLUSTERED.

    W tabeli utworzyć instrukcjaCLUSTERED można określić dla tylko jedno ograniczenie.Jeśli CLUSTERED określono dla ograniczenia UNIQUE i określony jest również ograniczenie na klucz podstawowy, klucz podstawowy domyślnie NONCLUSTERED.

  • ODWOŁANIA DO KLUCZA OBCEGO
    To ograniczenie, które zapewnia więzy integralność danych w kolumna lub kolumn.Ograniczenia klucza OBCEGO wymagają, że każda wartość w kolumna istnieje odwołanie kolumna lub kolumn w tej tabela.Ograniczenia na klucz OBCY można odwoływać się tylko te kolumny, które są ograniczenia na klucz podstawowy lub unikatowe w tej tabela lub kolumny, do których odwołuje się indeks unikatowy w tej tabela.Klucze obce na kolumny obliczane muszą również oznaczone PERSISTED.

  • [ schema_name**.**] referenced_table_name]
    Jest nazwą tabela odwołuje się ograniczenie klucza OBCEGO i schematu, do której należy.

  • **(**ref_column [ ,... n ] )
    Jest kolumnalub lista kolumn z tabela odwołuje się ograniczenie klucza OBCEGO.

  • PRZY USUWANIU { żadnej akcji | KASKADOWO | USTAW WARTOŚĆ NULL | USTAWIANIE DOMYŚLNEJ}
    Określa, jaka akcja dzieje się z wierszy w tabela utworzony, jeśli te wiersze relacji więzy i odwołanie wiersz został usunięty z tabelanadrzędnej.Wartością domyślną jest Brak akcji.

    • BRAK AKCJI
      Aparat baz danych Raises komunikat o błędzie i usuwania akcja dla wiersza w tabela nadrzędnej jest wycofywany Wstecz.

    • KASKADA
      Odpowiednie wiersze są usuwane z tabela w odwołującym się usunięcie tego wiersza z tabelanadrzędnej.

    • USTAW WARTOŚĆ NULL
      Wartości wchodzące w skład klucz obcy są zestaw na NULL, jeśli odpowiedni wiersz w tabela nadrzędnej jest usuwany.To ograniczenie wykonaćkolumn klucz obcy musi przyjmować wartości zerowej.

    • USTAWIANIE DOMYŚLNEGO
      Wszystkie wartości wchodzące w skład klucz obcy są zestaw wartości domyślne usunięcie odpowiedni wiersz w tabela nadrzędnej.To ograniczenie do wykonaćwszystkich kolumn klucz obcy musi mieć definicje domyślne.Jeśli kolumna jest nullable i nie ma żadnych jawne domyślną wartość zestaw, NULL staje się niejawna domyślna wartość kolumna.

    Nie określaj KASKADOWO, jeśli tabela zostaną uwzględnione w korespondencji seryjnej publikacja , która wykorzystuje rekordy logiczne.Aby uzyskać więcej informacji o rekordach logiczne zobacz Zmiany do wierszy powiązanych z rekordami logiczne grupowanie.

    NA DELETE CASCADE nie można zdefiniować Jeśli wyzwalacza INSTEAD OF DELETE na już istnieje w tabela.

    Na przykład w AdventureWorks2008R2 bazy danych, ProductVendor tabela ma relacji więzy z dostawcy tabela.ProductVendor.BusinessEntityID klucz obcy odwołania Vendor.BusinessEntityID kluczpodstawowego.

    Jeśli wiersz w wykonaniu DELETE instrukcja dostawcy tabelai ON DELETE CASCADE akcja określono dla ProductVendor.BusinessEntityID, Aparat baz danych sprawdza, czy jeden lub więcej wierszy zależne w ProductVendor tabela.Jeśli istnieją, zależne od wierszy w ProductVendor tabela są usuwane, a także odwołanie do wiersza w dostawcy tabela.

    I odwrotnie, jeśli brak akcji Aparat baz danych zgłasza błąd i wycofuje usuwania akcja dostawcy wiersza, jeśli co najmniej jeden wiersz w ProductVendor tabela , która odwołuje się do niej.

  • PRZY aktualizacji { żadnej akcji | KASKADOWO | USTAW WARTOŚĆ NULL | USTAWIANIE DOMYŚLNEJ}
    Określa, jaka akcja dzieje się z wierszy w tabela zmodyfikowane, jeśli wiersze mają relacji więzy i odwołanie wiersza jest aktualizowana w tabelanadrzędnej.Wartością domyślną jest Brak akcji.

    • BRAK AKCJI
      Aparat baz danych Raises komunikat o błędzie, a aktualizacja akcja dla wiersza w tabela nadrzędnej jest wycofywany Wstecz.

    • KASKADA
      Odpowiednie wiersze są aktualizowane w odwołującym się tabela podczas aktualizowania tego wiersza w tabelanadrzędnej.

    • USTAW WARTOŚĆ NULL
      Wartości wchodzące w skład klucz obcy są zestaw na wartość NULL podczas aktualizacji odpowiedniego wiersza w tabela nadrzędnej.To ograniczenie wykonaćkolumn klucz obcy musi przyjmować wartości zerowej.

    • USTAWIANIE DOMYŚLNEGO
      Wszystkie wartości wchodzące w skład klucz obcy są zestaw wartości domyślne aktualizacji odpowiedniego wiersza w tabela nadrzędnej.To ograniczenie do wykonaćwszystkich kolumn klucz obcy musi mieć definicje domyślne.Jeśli kolumna jest nullable i nie ma żadnych jawne domyślną wartość zestaw, NULL staje się niejawna domyślna wartość kolumna.

    Nie określaj KASKADOWO, jeśli tabela zostaną uwzględnione w korespondencji seryjnej publikacja , która wykorzystuje rekordy logiczne.Aby uzyskać więcej informacji o rekordach logiczne zobacz Zmiany do wierszy powiązanych z rekordami logiczne grupowanie.

    NA UPDATE CASCADE nie można zdefiniować Jeśli wyzwalacza INSTEAD OF UPDATE na już istnieje w tabela jest przeliczana.

    Na przykład w AdventureWorks2008R2 bazy danych, ProductVendor tabela ma relacji więzy z dostawcy tabela: ProductVendor.BusinessEntity klucz obcy odwołania Vendor.BusinessEntityID kluczpodstawowego.

    Jeśli aktualizacja instrukcja jest wykonywane w wierszu w dostawcy tabelai ON UPDATE CASCADE akcja określono dla ProductVendor.BusinessEntityID, Aparat baz danych sprawdza, czy jeden lub więcej wierszy zależne w ProductVendor tabela.Jeśli istnieją, zależne od wierszy w ProductVendor tabela są aktualizowane i wiersz określany również w dostawcy tabela.

    I odwrotnie, jeśli brak akcji Aparat baz danych zgłasza błąd i przywraca poprzednie wersje aktualizacji akcja dostawcy wiersza, jeśli co najmniej jeden wiersz w ProductVendor tabela , która odwołuje się do niej.

  • WYBORU
    To ograniczenie wymusza domena integralność poprzez ograniczenie możliwych wartości, które mogą być wprowadzane do kolumna lub kolumn.Sprawdź, czy też muszą być oznakowane ograniczenia dla kolumny obliczanej PERSISTED.

  • logical_expression
    Jest logiczną wyrażenie , które zwraca wartość PRAWDA lub FAŁSZ.Alias typów danych nie może być częścią wyrażenie.

  • column
    Jest kolumna lub listę kolumn w nawiasach, używane w tabela ograniczenia do wskazywania kolumn używanych w definicji ograniczenia.

  • [ ASC | DESC]
    Określa kolejność sortowania kolumna lub kolumn, uczestniczących w tabela ograniczeń.Wartość domyślna to ASC.

  • partition_scheme_name
    Jest to nazwa schemat partycji definiuje aplikacjami, na który będzie mapowany partycji tabela partycjonowana .schemat partycji musi znajdować się wewnątrz bazy danych.

  • [ partition_column_name**.** ]
    Określa kolumna , przeciwko któremu tabela partycjonowana będzie można podzielić na partycje.kolumna musi odpowiadać określonej w funkcja partycji, partition_scheme_name Korzystanie z typem danych, długość i precyzji.Kolumny obliczane, które uczestniczą w partycji funkcja muszą być wyraźnie oznakowane PERSISTED.

    Ważna informacjaWażne:

    Zaleca się, aby określić NOT NULL na cele instrukcji ALTER TABLE lub partycjonowanie kolumna tabel podzielonym na partycje i nonpartitioned tabel, które są źródła...Operacje przełącznika.W ten sposób sprawdza, czy wszelkie ograniczenia CHECK partycjonowanie kolumn ma sprawdzić, czy wartości null .Aby uzyskać więcej informacji, zobacz Efektywne przesyłania danych przy użyciu przełączania partycji.

  • Z FILLFACTOR **=**fillfactor
    Określa, jak pełne Aparat baz danych należy ustawić każdej strona indeksu , który jest używany do przechowywania danych indeksu.Określona przez użytkownika fillfactor możliwe wartości od 1 do 100.Jeśli wartość nie zostanie określona, domyślnie wynosi 0.Wartości współczynnika wypełnienia 0 i 100 są takie same pod każdym względem.

    Ważna informacjaWażne:

    Documenting Z FILLFACTOR = fillfactor jako jedyna opcja Indeks dotyczący ograniczenia na klucz podstawowy lub unikatowe utrzymywane w celu zapewnienia zgodności z poprzednimi wersjami, ale nie zostaną udokumentowane w ten sposób w przyszłych wydaniach.

  • column_set_nameALL_SPARSE_COLUMNS DLA COLUMN_SET XML
    Jest nazwą kolumna zestaw.kolumnazestaw jest bez reprezentacji XML, który scala wszystkie sparse kolumny tabela w strukturze danych wyjściowych. Aby uzyskać więcej informacji na temat zestawów kolumna zobacz Korzystanie z zestawów kolumny.

  • <table_option> :: =
    Określa opcje tabela .

  • DATA_COMPRESSION
    Określa opcję kompresji danych dla określonej tabela, numer lub zakres partycji.Dostępne są następujące opcje:

    • BRAK
      Tabela lub określonej partycji nie są kompresowane.

    • WIERSZ
      Tabeli lub określone partycje są kompresowane przy użyciu kompresji wierszy.

    • STRONY
      Tabeli lub określone partycje są kompresowane przy użyciu kompresji strona .

    Aby uzyskać więcej informacji dotyczących kompresji, zobacz Tworzenie skompresowanego tabel i indeksów.

  • NA PARTYCJACH () { <partition_number_expression> | <zakres>} ,... n )
    Określa partycje, do których stosuje się ustawienie DATA_COMPRESSION.Jeśli tabela nie jest podzielony na partycje, argument na PARTYCJE spowoduje wystąpienie błędu.PARTYCJE na klauzula nie zostanie podana, opcja DATA_COMPRESSION zastosuje do wszystkich partycji tabela partycjonowana.

    <partition_number_expression> można określić w następujący sposób:

    • Podaj numer partycji partycji, na przykład: NA PARTYCJACH (2).

    • Zapewniają kilka poszczególnych partycji rozdzielonych przecinkami, na przykład numery partycji: NA PARTYCJACH (1, 5).

    • Na przykład podać zakresy i poszczególnych partycji: NA PARTYCJACH (2, 4, 6-8)

    <zakres> może być określona jako liczby partycji, oddzielając wyraz, na przykład: NA PARTYCJACH (6-8).

    Aby zestaw różne typy kompresji danych na różnych partycjach określ opcję DATA_COMPRESSION więcej niż jeden raz, na przykład:

    WITH 
    (
    DATA_COMPRESSION = NONE ON PARTITIONS (1), 
    DATA_COMPRESSION = ROW ON PARTITIONS (2, 4, 6 TO 8), 
    DATA_COMPRESSION = PAGE ON PARTITIONS (3, 5)
    )
    
  • <index_option> :: =
    Określa opcje indeksu.Aby uzyskać pełny opis tych opcji, zobacz CREATE INDEX (Transact-SQL).

  • PAD_INDEX = {ON | OFF }
    NA procent wolnego miejsca określone przez zastosowanie FILLFACTOR do stron pośredni poziom indeksu.Podczas OFF lub FILLFACTOR wartości go nie określono strony pośredni poziom są wypełnione bliskiej zdolności produkcyjnych, pozostawiając wystarczająco dużo miejsca na co najmniej jeden wiersz maksymalnego rozmiaru, który może mieć indeks, biorąc pod uwagę zestaw kluczy na stronach pośrednich.Domyślnie jest wyłączona.

  • FILLFACTOR **=**fillfactor
    Określa wartość procentową, która wskazuje, jak pełne Aparat baz danych należy ustawić liść poziom każdej strona indeksu podczas tworzenia indeksu lub zmianą.fillfactormusi mieć wartość całkowitą od 1 do 100.Wartość domyślna to 0.Wartości współczynnika wypełnienia 0 i 100 są takie same pod każdym względem.

  • IGNORE_DUP_KEY = {ON | OFF }
    Określa odpowiedź błąd podczas operacji wstawiania spróbuje wstawić wartości zduplikowany klucz do indeks unikatowy.Opcja IGNORE_DUP_KEY dotyczy tylko wstawianie operacji po utworzeniu indeksu lub przebudowanych.Opcja nie ma wpływu podczas wykonywania CREATE INDEX, Zmianę INDEKSU, lub Aktualizacja.Domyślnie jest wyłączona.

    • NA
      Komunikat ostrzegawczy ma miejsce, gdy wartości zduplikowanych klucz są wstawiane do indeks unikatowy.Tylko wiersze naruszenie ograniczenia unikatowości nie powiedzie się.

    • WYŁĄCZANIE
      Komunikat o błędzie ma miejsce, gdy wartości zduplikowanych klucz są wstawiane do indeks unikatowy.Cała operacja WSTAWIANIA zostanie wycofana.

    IGNORE_DUP_KEY nie może być zestaw na indeksy utworzone na widok, indeksów — unikatowy, indeksy XML, indeksy przestrzenne i filtrowane indeksy.

    Służy do wyświetlania IGNORE_DUP_KEY, sys.indexes.

    Składnia zgodna z poprzednimi wersjami, Z IGNORE_DUP_KEY jest równoważne Z IGNORE_DUP_KEY = ON.

  • STATISTICS_NORECOMPUTE = {ON | OFF }
    Kiedy na, out-o-statystyka indeksudata nie są automatycznie przeliczane.Po WYŁĄCZENIU, statystyk automatycznych aktualizacji są włączone.Domyślnie jest wyłączona.

  • ALLOW_ROW_LOCKS = { ON | OFF}
    Kiedy, blokad wiersza są dozwolone podczas dostępu do indeksu.Aparat baz danych Określa, kiedy są używane wiersza blokad.Po WYŁĄCZENIU, blokad wiersza nie są używane.Domyślnie jest włączone.

  • ALLOW_PAGE_LOCKS = { na | OFF}
    Kiedy, blokad strona są dozwolone podczas dostępu do indeksu.Aparat baz danych Określa, kiedy są używane strona blokad.Po WYŁĄCZENIU, blokad strona nie są używane.Domyślnie jest włączone.

Uwagi

SQL Server 2008może mieć maksymalnie 2 miliard tabele na bazie danych. tabela , która ma zdefiniowane kolumna zestaw, może mieć maksymalnie od 30 000 kolumn z maksymalnie 1024-sparse + obliczanych kolumn. Tabele, które nie mają zestawy kolumna jest ograniczona do 1024 kolumn.Liczba wierszy i całkowity rozmiar tabela jest ograniczony tylko przez dostępne miejsce.Maksymalna liczba bajtów w wierszu jest 8,060.Ograniczenie to jest złagodzone dla tabel z varchar, nvarchar, varbinary, lub sql_variant kolumny, które powodują szerokość całkowita zdefiniowanej tabela przekracza 8,060 bajtów.Długość każdej z tych kolumn nadal muszą mieścić się w granicach 8000 bajtów, ale ich szerokość Scalonej może przekroczyć limit bajt 8,060 w tabela.Aby uzyskać więcej informacji, zobacz Przepełnienie wiersz danych powyżej 8 KB.

Każda tabela może zawierać maksymalnie 999 zbudowania indeksów nie klastrowanych i 1 indeks klastrowany.Obejmują one indeksy generowane w celu obsługi wszelkie ograniczenia klucza podstawowego i unikatowe zdefiniowanych dla tabela.

Miejsce na ogólnie jest przydzielane do tabel i indeksów w przyrostach jednego fragment na czas.Podczas tworzenia tabela lub indeksie przydzielany stron z zakresów mieszanych dopóki nie ma wystarczająco dużo stron do wypełniania jednolitego fragment.Po posiada wystarczającą ilość stron do wypełniania jednolitego fragmentinny fragment jest przydzielona za każdym czas przepełni aktualnie przydzielonych zakresów.Dla raportu o ilość miejsca przydzielonych i używane przez tabela, wykonać sp_spaceused.

Aparat baz danych Nie wymusza kolejność w jakiej domyślne, tożsamość, ROWGUIDCOL lub ograniczenia kolumna są określone w definicji kolumna .

Podczas tworzenia tabela opcji Identyfikator NOTOWANE jest zawsze przechowywane jako na w metadane dla tabela, nawet jeśli opcja jest zestaw na wyłączone, podczas tworzenia tabela .

Tabele tymczasowe

Można utworzyć tabele tymczasowe lokalne i globalne.Lokalne tabel tymczasowych są widoczne tylko w bieżącej sesjai globalnego tabel tymczasowych są widoczne dla wszystkich sesji.Tabele tymczasowe nie można podzielić na partycje.

Prefiks nazwy lokalne tymczasowej tabela z pojedynczym znakiem numeru (#table_name) i prefiksu globalnego tymczasowej tabela nazw z podwójnym znakiem numeru (##table_name).

InstrukcjeSQL odwołać tymczasowej tabela przy użyciu wartości określonej dla table_name w tabeli utworzyć instrukcja, na przykład:

CREATE TABLE #MyTempTable (cola INT PRIMARY KEY);

INSERT INTO #MyTempTable VALUES (1);

Jeśli tworzony jest więcej niż jeden tymczasowej tabela wewnątrz pojedyncza procedura składowana lub partia, muszą mieć różne nazwy.

Jeśli lokalny tymczasowej tabela jest tworzona w procedura składowana lub aplikacji, które mogą być wykonywane w tym samym czas przez kilku użytkowników Aparat baz danych musi być w stanie odróżnić tabele utworzone przez innych użytkowników.Aparat baz danych To dołączając wewnętrznie sufiks numeryczny, do każdej nazwy lokalne tymczasowej tabela .Pełna nazwa tabela tymczasowej przechowywane w sysobjects tabela w tempdb składa się z określoną w instrukcja CREATE TABLE i sufiks numeryczny wygenerowane przez system nazwę tabela . Aby umożliwić sufiks, table_name określony dla lokalnego tymczasowa nazwa nie może przekraczać 116 znaków.

Tabele tymczasowe są automatycznie usuwane po przejściu do ich zakres, chyba że wyraźnie porzucone przy użyciu DROP TABLE:

  • Lokalne tymczasowej tabela utworzonego w procedura składowana jest przenoszony automatycznie po zakończeniu procedura składowana .tabela można się odwoływać za zagnieżdżonych procedur przechowywanych wykonywane przez procedura składowana tworzenia tabela.W tabela nie można odwoływać się w procesie o nazwie procedura składowana tworzenia tabela.

  • Innych lokalnych tabel tymczasowych są usuwane automatycznie po zakończeniu bieżącej sesja.

  • Globalne tabel tymczasowych są automatycznie usuwane po zakończeniu sesja utworzonych w tabela i inne zadania zatrzymano, odwołanie się do nich.Skojarzenie zadania z tabela jest obsługiwana tylko dla życia jednej Transact-SQL instrukcja.Oznacza to, że global tymczasowej tabela zostanie usunięte po zakończeniu ostatniego Transact-SQL instrukcja był aktywnie odwołanie do tabela , podczas tworzenia sesja została zakończona.

Lokalne tymczasowej tabela w ramach procedura składowana lub wyzwalacz może mieć taką samą nazwę jak tymczasowej tabela utworzony przed procedura składowana lub nosi nazwę wyzwalacza.Jednakże jeśli kwerendy odwołuje się do tabela tymczasowej i dwóch tabel tymczasowych o tej samej nazwie istnieje w tym czas, nie jest zdefiniowane, z której tabela kwerendy jest rozwiązywana przed.Zagnieżdżone procedur przechowywanych, można także utworzyć tabel tymczasowych z taką samą nazwę jak tymczasowej tabela , utworzony przez procedura składowana o nazwie go.Jednak modyfikacje do rozpoznawania w tabela został utworzony w procedurze zagnieżdżonych tabela musi mieć taką samą strukturę, tej samej nazwy kolumna tabela utworzonego w procedurze wywołującej.Pokazano to na przykładzie poniżej.

CREATE PROCEDURE dbo.Test2
AS
    CREATE TABLE #t(x INT PRIMARY KEY);
    INSERT INTO #t VALUES (2);
    SELECT Test2Col = x FROM #t;
GO

CREATE PROCEDURE dbo.Test1
AS
    CREATE TABLE #t(x INT PRIMARY KEY);
    INSERT INTO #t VALUES (1);
    SELECT Test1Col = x FROM #t;
EXEC Test2;
GO

CREATE TABLE #t(x INT PRIMARY KEY);
INSERT INTO #t VALUES (99);
GO

EXEC Test1;
GO

Oto zestaw wyników.

(1 row(s) affected)

Test1Col

-----------

1

(1 row(s) affected)

Test2Col

-----------

2

Podczas tworzenia lokalnej lub globalnej tabel tymczasowych składni CREATE TABLE obsługuje definicje ograniczenie z wyjątkiem ograniczeń klucza OBCEGO.Jeżeli określono ograniczenie klucza OBCEGO w tabelatymczasowej, instrukcja zwraca komunikat ostrzegawczy informujący, że ograniczenie zostało pominięte.tabela jest jednak tworzony bez ograniczeń klucza OBCEGO.Ograniczenia klucza OBCEGO nie mogą odwoływać się do tabel tymczasowych.

Zaleca się korzystanie ze zmiennych tabela zamiast tabel tymczasowych.Tabele tymczasowe są przydatne, gdy indeksy muszą być tworzone jawnie na nich lub gdy wartości tabela muszą być widoczne wielu procedury przechowywanej lub funkcji.Zmienne tabela programu contribute w bardziej wydajne przetwarzanie kwerendy.Aby uzyskać więcej informacji, zobacz Tabela (języka Transact-SQL).

Tabele podzielonym na partycje

Przed utworzeniem tabela partycjonowana przy użyciu CREATE TABLE, należy najpierw utworzyć partycję funkcja do określenia, jak tabela staje się na partycje.Przy tworzeniu partycji funkcja Funkcji tworzenia PARTYCJI.Po drugie należy utworzyć schemat partycji do określenia aplikacjami, przechowujące partycje oznaczone partycji funkcja.schemat partycji jest tworzony przy użyciu Schemat tworzenia PARTYCJI.Nie można określić położenie ograniczenia na klucz podstawowy lub unikatowe do oddzielenia aplikacjami dla tabel podzielonym na partycje.Aby uzyskać więcej informacji, zobacz Podzielonym na partycje tabel i indeksów.

Ograniczenie na klucz podstawowy

  • tabela może zawierać tylko jedno ograniczenie klucza podstawowego.

  • Indeks utworzony przez ograniczenie klucza podstawowego nie może spowodować liczba indeksów w tabela , przekracza 1 indeks klastrowanyi 999 zbudowania indeksów nie klastrowanych.

  • Jeżeli nie określono CLUSTERED lub NONCLUSTERED dla ograniczenia na klucz podstawowy, CLUSTERED jest używana, jeśli nie ma żadnych indeksów klastrowanych określony dla ograniczenia typu UNIQUE.

  • Wszystkie kolumny zdefiniowane w ramach ograniczeń klucza podstawowego musi być zdefiniowany jako NOT NULL.Jeśli opcje dopuszczania wartości null nie jest określony, wszystkie kolumny wchodzące w ograniczenie klucza podstawowego ma ich opcje dopuszczania wartości null zestaw na nie NULL.

  • Na zdefiniowany przez użytkownika typ CLRkolumnajest zdefiniowany klucz podstawowy, implementacji typu musi obsługiwać binarnych zamawiania. Aby uzyskać więcej informacji, zobacz CLR typów zdefiniowanych przez użytkownika.

Ograniczenie typu UNIQUE

  • Jeżeli nie określono CLUSTERED lub NONCLUSTERED dla ograniczenia typu UNIQUE, domyślnie używany jest NONCLUSTERED.

  • Każde ograniczenie typu UNIQUE generuje indeks.Numer ograniczenie typu UNIQUE, nie może spowodować liczba indeksów w tabela , przekracza 1 indeks klastrowanyi 999 zbudowania indeksów nie klastrowanych.

  • Ograniczenie typu unique jest zdefiniowana na zdefiniowany przez użytkownika typ CLR kolumna, implementacji typu musi obsługiwać binarnych lub operator-na podstawie kolejności.Aby uzyskać więcej informacji, zobacz CLR typów zdefiniowanych przez użytkownika.

Ograniczenia na klucz OBCY

  • Po wprowadzeniu wartości inne niż NULL w kolumna ograniczenie klucza OBCEGO wartości musi istnieć w odwołanie kolumna; w przeciwnym razie zwracany jest komunikat o błędzie naruszenia klucz obcy .

  • Ograniczenia klucza OBCEGO są stosowane do poprzedniej kolumna, chyba że kolumny źródło są określone.

  • Ograniczenia na klucz OBCY można odwoływać się tylko tabele w obrębie tej samej bazy danych na tym samym serwerze.Więzy integralność między bazami danych muszą być zaimplementowane za pomocą wyzwalaczy.Aby uzyskać więcej informacji, zobacz CREATE TRIGGER (Transact-SQL).

  • Ograniczenia na klucz OBCY można odwoływać się do innej kolumna w tej samej tabela.To jest nazywane odsyłacz.

  • ODWOŁANIA do klauzula kolumna-poziom ograniczenia na klucz OBCY można wyświetlić tylko jedno odwołanie kolumna.W tej kolumna muszą mieć ten sam typ kolumna określono ograniczenia danych.

  • ODWOŁANIA do klauzula tabela-poziom ograniczenia na klucz OBCY musi mieć taką samą liczbę kolumn odwołania jako liczba kolumn na liście kolumna ograniczenie.Typ danych każdego odwołania kolumna również musi być taka sama, jak odpowiadające im kolumna na liście kolumna .

  • Nie można określić KASKADOWO, ustaw wartość NULL lub Ustaw domyślne Jeśli kolumna typu timestamp jest częścią klucz obcy lub powołany klucz.

  • KASKADOWO, ustaw wartość NULL, Ustaw domyślne i Brak akcji można łączyć na tabele, które mają relacji więzy między sobą.Jeśli Aparat baz danych wykryje brak akcji, zatrzymuje i zwojach związanych z powrotem KASKADOWO, ustaw wartość NULL i Ustaw domyślne akcje.Podczas usuwania instrukcja powoduje, że kombinacja KASKADOWO, ustaw wartość NULL, Ustaw domyślne i akcje Brak akcji, KASKADOWO, ustaw wartość NULL i Ustaw domyślne akcje są stosowane przed Aparat baz danych sprawdza, czy żadne działanie nie.

  • Aparat baz danych Nie ma wstępnie zdefiniowany limit na liczbę tabela może zawierać ograniczenia klucza OBCEGO, które odwołują się do innych tabel lub liczby ograniczeń klucza OBCEGO, będące własnością innych tabel, które odwołują się do określonej tabela.

    Jednakże rzeczywista liczba ograniczenia klucza OBCEGO, które mogą być używane jest ograniczony przez konfiguracja sprzętu i projektowania bazy danych i aplikacji.Zaleca się, że tabela zawiera nie więcej niż 253 ograniczenia klucza OBCEGO i być utworzone odwołanie przez nie więcej niż 253 ograniczenia klucza OBCEGO.Skuteczne limit może być więcej lub mniej, w zależności od aplikacji i sprzętu.Należy wziąć pod uwagę koszt wymuszanie ograniczenia na klucz OBCY podczas projektowania bazy danych i aplikacji.

  • Ograniczenia klucza OBCEGO nie są wymuszane na tabelach tymczasowych.

  • Ograniczenia na klucz OBCY można odwoływać się tylko do kolumn w klucz podstawowy lub unikatowe ograniczenia w tej tabela lub INDEKSU UNIKATOWEGO dla tej tabela.

  • klucz obcy jest zdefiniowany w zdefiniowany przez użytkownika typ CLRkolumna, implementacji typu musi obsługiwać binarnych zamawiania. Aby uzyskać więcej informacji, zobacz CLR typów zdefiniowanych przez użytkownika.

  • kolumna typu varchar(max) , może uczestniczyć w ograniczenia na klucz OBCY tylko, jeśli podstawowy klucz , który odwołuje się również jest zdefiniowane jako typ varchar(max).

Definicje domyślne

  • kolumna może mieć tylko jedną definicję domyślne.

  • Definicja domyślne może zawierać wartości stała , funkcji, SQL-92 funkcje bez parametrówlub wartość NULL.W poniższej tabela przedstawiono funkcje bez parametrów i wartości, które zwracają domyślnej podczas WSTAWIANIA instrukcja.

    -92 ZerowychSQL funkcja

    Wartość zwracana

    CURRENT_TIMESTAMP

    Bieżąca data i czas.

    CURRENT_USER

    Nazwa użytkownika wykonywania instrukcji insert.

    SESSION_USER

    Nazwa użytkownika wykonywania instrukcji insert.

    SYSTEM_USER

    Nazwa użytkownika wykonywania instrukcji insert.

    UŻYTKOWNIK

    Nazwa użytkownika wykonywania instrukcji insert.

  • constant_expressionw DOMYŚLNEJ definicji nie może odwoływać się do innej kolumna w tabelalub do innych tabel, widoków, lub procedur przechowywanych.

  • Definicje DOMYŚLNEJ nie można utworzyć kolumn z timestamp Typ danych lub kolumny tożsamości właściwość.

  • Definicje domyślny nie można utworzyć dla kolumn o typach danych alias , jeśli typ danych alias jest związany z domyślnego obiektu.

Ograniczenia CHECK

  • kolumna może zawierać dowolną liczbę ograniczeń CHECK, a warunek może zawierać wiele wyrażeń logicznych w połączeniu z i oraz lub.Wiele ograniczeń typu CHECK dla kolumna są sprawdzane w kolejności, w jakiej zostały utworzone.

  • warunek wyszukiwania musi dawać w wynikuwyrażenie wartość logicznai nie można odwoływać się w innej tabela.

  • kolumna-poziom ograniczenie typu CHECK można odwołać tylko ograniczonej kolumnai tabela—poziom ograniczenie typu CHECK można odwoływać się tylko do kolumn w tej samej tabela.

    Sprawdź ograniczenia i reguły służą tej samej funkcja sprawdzania poprawności danych podczas instrukcji INSERT i UPDATE.

  • Istnieją reguły i ograniczeń typu CHECK dla kolumna lub kolumn, oceniane są wszystkie ograniczenia.

  • Nie mogą być określone ograniczenia CHECK na text, ntext, lub image kolumny.

Informacje dodatkowe ograniczenia

  • Indeks utworzony ograniczenia nie można usunąć za pomocą INDEKSU DROP; ograniczenie musi porzucone przy użyciu instrukcji ALTER TABLE.Indeks utworzony dla i używanych przez ograniczenie można zrekonstruować za pomocą zmiany INDEKSU.

  • Warunek ograniczający nazwy muszą spełniać zasady dla identyfikatorów, z tym wyjątkiem, że nazwa nie może rozpoczynać się znakiem numeru (#).Jeśli constraint_name jest nie dostarczonych, nazwa wygenerowane przez system jest przypisana do ograniczenia.Nazwa ograniczenia pojawi się w dowolnym komunikat o błędzie o naruszeniach ograniczeń dotyczących.

  • Ograniczenie naruszone w INSERT, UPDATE, lub usunąć instrukcja, instrukcja zostaje zakończona.Jednak gdy ustawienie XACT_ABORT jest zestaw na wyłączone, transakcji, jeśli instrukcja jest częścią transakcja jawna, nadal być przetwarzane.Gdy ustawienie XACT_ABORT jest zestaw na, cała transakcja jest cofana.Umożliwia także TRANSAKCJĘ ROLLBACK instrukcja z definicją transakcji poprzez sprawdzenie **@@**błąd systemu funkcja.

  • Gdy ALLOW_ROW_LOCKS = ON i ALLOW_PAGE_LOCK = ON wiersz, strona-, i tabela-poziom blokady są dozwolone podczas dostępu do indeksu.Aparat baz danych Wybiera odpowiedni blokada i może eskalować blokada z rzędu lub stronablokada tabelablokada. Aby uzyskać więcej informacji, zobacz Eskalację blokady (aparat bazy danych).Gdy ALLOW_ROW_LOCKS = OFF i ALLOW_PAGE_LOCK = OFF tylko tabela-poziom blokada jest dopuszczalna, gdy dostęp do indeksu.Aby uzyskać więcej informacji o konfigurowaniu blokowania ziarnistość indeksu, zobacz Dostosowywanie blokowania indeksu.

  • Jeśli tabela zawiera klucz OBCY lub ograniczenia typu CHECK i wyzwalacze, warunki ograniczenia są oceniane przed wykonaniem wyzwalacza.

W przypadku raportu tabela i jej kolumn za pomocą sp_help lub sp_helpconstraint.Aby zmienić nazwę tabela, użyj sp_rename.W przypadku raportu widoków i procedur przechowywanych, które zależą od tabelaza pomocą sys.dm_sql_referenced_entities i sys.dm_sql_referencing_entities.

Zasady nullability w ramach definicji tabeli

opcje dopuszczania wartości null kolumna Określa, czy kolumna można zezwolić na wartość null (NULL) jako dane w tej kolumna.Wartość NULL nie jest zero lub pusty: Wartość NULL oznacza zapis nie został utworzony lub zostało dostarczone jawne NULL i zazwyczaj oznacza, że wartość jest nieznany lub nie ma zastosowania.

Korzystania CREATE TABLE lub zmiany tabeli Tworzenie lub zmienianie tabelaustawień bazy danych i sesja wpływ i ewentualnie zastąpić opcje dopuszczania wartości null typu danych, która jest używana w definicji kolumna .Zaleca się, należy zawsze jawnie zdefiniować kolumna jako NULL lub NOT NULL dla kolumn noncomputed lub, jeśli używany jest typ danych zdefiniowany przez użytkownika umożliwia Użyj domyślnej opcje dopuszczania wartości null typ danych kolumna .Kolumny sparse zawsze Zezwalaj na wartości NULL.

Gdy kolumna opcje dopuszczania wartości null nie jest wyraźnie określony, kolumna opcje dopuszczania wartości null następują reguły przedstawione w poniższej tabela.

Typ danych kolumny

Reguły

Alias typ danych

Aparat baz danych Używa opcje dopuszczania wartości null został podany typ danych został utworzony.Aby określić domyślną opcje dopuszczania wartości null typu danych, użyj sp_help.

zdefiniowany przez użytkownika typ aparatu CLR

Nullability jest określana zgodnie z definicją kolumna .

Typ danych dostarczonych przez system

Jeśli typ danych dostarczonych przez system ma tylko jedną opcję, ma pierwszeństwo.timestamptypy danych muszą być NOT NULL.

Gdy ustawienia sesja są zestaw na przy użyciu zestawu:

  • ANSI_NULL_DFLT_ON = ON, jest przypisywana wartość NULL.

  • ANSI_NULL_DFLT_OFF = ON, nie jest przypisywana wartość NULL.

  • Gdy wszystkie ustawienia bazy danych są skonfigurowane przy użyciu ZMIEŃ bazę danych:

  • ANSI_NULL_DEFAULT_ON = ON, jest przypisywana wartość NULL.

  • ANSI_NULL_DEFAULT_OFF = ON, nie jest przypisywana wartość NULL.

  • Aby wyświetlić ustawienie bazy danych dla ANSI_NULL_DEFAULT, użyj sys.databases katalogu widoku

Kiedy ani ANSI_NULL_DFLT opcje są zestaw dla sesja i baza danych jest zestaw domyślne (ANSI_NULL_DEFAULTis Wył.), domyślnie nie jest przypisywana wartość NULL.

Jeśli kolumna jest kolumnaobliczana, jego opcje dopuszczania wartości null jest zawsze automatycznie określany przez Aparat baz danych.Aby dowiedzieć się opcje dopuszczania wartości null tego typu kolumna, użyj funkcja COLUMNPROPERTY z AllowsNull właściwość.

Ostrzeżenie

Sterownik ODBC serwera SQL i Microsoft OLE DB Provider for SQL Server domyślnie obie posiadające ANSI_NULL_DFLT_ON zestaw na.Użytkownicy ODBC i OLE DB można skonfigurować to źródeł danych ODBC lub z połączenia atrybuty lub właściwości, zestaw przez aplikację.

Kompresja danych

Tabele systemowe nie można włączyć kompresję.Podczas tworzenia tabelakompresja danych jest zestaw na wartość Brak, chyba że określono inaczej.Jeżeli podano listę partycji lub partycji, która jest zakreszostanie wygenerowany błąd.Aby uzyskać informacje o kompresji danych, zobacz Tworzenie skompresowanego tabel i indeksów.

Aby ocenić, jak zmiana stanu kompresji będą wpływać na tabela, indeks lub partycji, należy użyć sp_estimate_data_compression_savings procedura składowana.

Uprawnienia

Wymaga uprawnienia CREATE TABLE w bazie danych i ZMIEŃ na schemacie, w którym tworzona jest tabela .

Jeśli kolumny w instrukcja CREATE TABLE są zdefiniowane zdefiniowany przez użytkownika typ CLR, własność tego typu albo uprawnienie odwołania jest wymagany.

Jeśli kolumny w instrukcja CREATE TABLE XML schematu kolekcja skojarzonych z nimi, własność schematu XML kolekcja albo uprawnienie odwołania jest wymagany.

Przykłady

A.Za pomocą ograniczeń klucza podstawowego

Poniższy przykład ilustruje definiowanie kolumna dla ograniczeń klucza podstawowego z indeks klastrowany na BusinessEntityIDkolumna Employee(pozwalając systemu podawania nazwy ograniczenia)tabela w AdventureWorks2008R2 przykładowej bazy danych.

BusinessEntityID int
PRIMARY KEY CLUSTERED

B.Za pomocą ograniczenia klucza OBCEGO

Ograniczenia na klucz OBCY można odwołać innej tabela.Kluczy obcych mogą być jedno-, klawiszekolumna lub wielokolumnowego kluczy.To poniższy przykład zawiera jedno -kolumna ograniczenia na klucz OBCY w SalesOrderHeader tabela , która odwołuje się do SalesPerson tabela.Tylko odwołania do klauzula jest wymagana dla pojedynczejkolumna ograniczenia na klucz OBCY.

SalesPersonID int NULL
REFERENCES SalesPerson(BusinessEntityID)

Można także jawnie używać klucza OBCEGO klauzula i narastającej kolumna atrybut.Uwaga nazwy kolumna nie musi być taka sama w obu tabelach.

FOREIGN KEY (SalesPersonID) REFERENCES SalesPerson(BusinessEntityID)

Ograniczenia wielokolumnowego klucz są tworzone jako ograniczenia tabela .W AdventureWorks2008R2 bazy danych, SpecialOfferProduct tabela zawiera wielokolumnowego podstawowy klucz.Następujący przykład pokazuje sposób odniesieniami do tego klucz z innej tabela; Nazwa ograniczenia jawne jest opcjonalna.

CONSTRAINT FK_SpecialOfferProduct_SalesOrderDetail FOREIGN KEY
 (ProductID, SpecialOfferID)
REFERENCES SpecialOfferProduct (ProductID, SpecialOfferID)

C.Za pomocą ograniczeń UNIQUE

Ograniczenie typu UNIQUE są używane do wymuszać unikatowość kolumn klucz nonprimary.Poniższy przykład wymusza ograniczenie, Name kolumna Product tabela musi być unikatowy.

Name nvarchar(100) NOT NULL
UNIQUE NONCLUSTERED

D.Przy użyciu domyślnego definicje

Ustawienia domyślne podania wartości (z instrukcji INSERT i UPDATE) kiedy dostarczona żadna wartość.Na przykład AdventureWorks2008R2 bazy danych może zawierać przeszukiwania tabela lista różnych zadań, które można wypełnić pracowników firmy.W obszarze kolumna opisujący każdego zadaniedomyślny ciąg znaków mogłaby opis, gdy rzeczywisty opis nie wprowadzono jawnie.

DEFAULT 'New Position - title not formalized yet'

Oprócz stałych definicje domyślne można uwzględniać funkcje.Uzyskać pozycję bieżącą data , należy użyć następującego przykładu.

DEFAULT (getdate())

Skanowaniafunkcja zerowych - może również zwiększyć integralność danych.Aby śledzić użytkownika, który wstawiony wiersz, należy użyć zerowych -funkcja dla użytkownika.Nie należy ujmować funkcji zerowych w nawiasach.

DEFAULT USER

E.Za pomocą ograniczeń CHECK

W poniższym przykładzie pokazano ograniczeń wprowadzonych wartości, które są wprowadzane do CreditRating kolumna Vendor tabela.Ograniczenie nie ma nazwy.

CHECK (CreditRating >= 1 and CreditRating <= 5)

W tym przykładzie przedstawiono o nazwie ograniczenie z ograniczeniem deseń w danych znakowych wprowadzane w kolumna tabela.

CONSTRAINT CK_emp_id CHECK (emp_id LIKE 
'[A-Z][A-Z][A-Z][1-9][0-9][0-9][0-9][0-9][FM]' 
OR emp_id LIKE '[A-Z]-[A-Z][1-9][0-9][0-9][0-9][0-9][FM]')

W tym przykładzie określa, że wartości musi mieścić się w określonej liście lub wykonaj określony wzorzec.

CHECK (emp_id IN ('1389', '0736', '0877', '1622', '1756')
OR emp_id LIKE '99[0-9][0-9]')

F.Wyświetlanie definicji pełną tabela

W poniższym przykładzie przedstawiono definicje pełną tabela ze wszystkich definicji ograniczenia dla tabela PurchaseOrderDetail utworzone w AdventureWorks2008R2 bazy danych.Należy zauważyć, że aby uruchomić próbki, schematu tabela jest zmieniany na dbo.

CREATE TABLE dbo.PurchaseOrderDetail
(
    PurchaseOrderID int NOT NULL
        REFERENCES Purchasing.PurchaseOrderHeader(PurchaseOrderID),
    LineNumber smallint NOT NULL,
    ProductID int NULL 
        REFERENCES Production.Product(ProductID),
    UnitPrice money NULL,
    OrderQty smallint NULL,
    ReceivedQty float NULL,
    RejectedQty float NULL,
    DueDate datetime NULL,
    rowguid uniqueidentifier ROWGUIDCOL  NOT NULL
        CONSTRAINT DF_PurchaseOrderDetail_rowguid DEFAULT (newid()),
    ModifiedDate datetime NOT NULL 
        CONSTRAINT DF_PurchaseOrderDetail_ModifiedDate DEFAULT (getdate()),
    LineTotal  AS ((UnitPrice*OrderQty)),
    StockedQty  AS ((ReceivedQty-RejectedQty)),
    CONSTRAINT PK_PurchaseOrderDetail_PurchaseOrderID_LineNumber
               PRIMARY KEY CLUSTERED (PurchaseOrderID, LineNumber)
               WITH (IGNORE_DUP_KEY = OFF)
) 
ON PRIMARY;

G.Tworzenie tabela xml w kolumna wpisane do schematu XML kolekcja

Poniższy przykład tworzy tabela o xml kolumna wpisano do schematu XML kolekcja HRResumeSchemaCollection.DOCUMENT Słowa kluczowego Określa, że każde wystąpienie xml Typ danych w column_name może zawierać tylko jeden górny -poziom elementu.

USE AdventureWorks2008R2;
GO
CREATE TABLE HumanResources.EmployeeResumes 
   (LName nvarchar(25), FName nvarchar(25), 
    Resume xml( DOCUMENT HumanResources.HRResumeSchemaCollection) );

H.Tworzenie tabela partycjonowana

Poniższy przykład tworzy partycję funkcja do dzielenia na czterech partycji tabela lub indeksu.Następnie przykład tworzy schemat partycji , który określa aplikacjami, w którym do przechowywania każdej z czterech partycji.Wreszcie przykład tworzy tabela , która wykorzystuje schemat partycji.W tym przykładzie założono, że aplikacjami już istnieje w bazie danych.

CREATE PARTITION FUNCTION myRangePF1 (int)
    AS RANGE LEFT FOR VALUES (1, 100, 1000) ;
GO

CREATE PARTITION SCHEME myRangePS1
    AS PARTITION myRangePF1
    TO (test1fg, test2fg, test3fg, test4fg) ;
GO

CREATE TABLE PartitionTable (col1 int, col2 char(10))
    ON myRangePS1 (col1) ;
GO

Na podstawie wartości kolumna col1 z PartitionTable, partycje są przypisane w następujący sposób.

Grupa plików

test1fg

test2fg

test3fg

test4fg

Partycja

1

2

3

4

Wartości

Kolumna 1 <= 1

Kol1 > 1 Kol1 I <= 100

Kol1 > 100 Kol1 I <= 1 000

Kol1 > 1000

I.Za pomocą uniqueidentifier typu danych w kolumna

Poniższy przykład tworzy tabela o uniqueidentifier kolumna.W przykładzie użyto ograniczenie klucza podstawowego w celu ochrony tabela przeciwko użytkownikom wstawianie zduplikowanych wartości i korzysta z NEWSEQUENTIALID() funkcja w DEFAULT ograniczenie podać wartości dla nowych wierszy.właściwość ROWGUIDCOL jest stosowany do uniqueidentifierkolumna , tak że można się odwoływać za pomocą słowa kluczowego ROWGUID $.

CREATE TABLE dbo.Globally_Unique_Data
    (guid uniqueidentifier CONSTRAINT Guid_Default DEFAULT NEWSEQUENTIALID() ROWGUIDCOL,
    Employee_Name varchar(60)
    CONSTRAINT Guid_PK PRIMARY KEY (guid) );

J.Za pomocą wyrażenie dla kolumnaobliczanej

Poniższy przykład ilustruje użycie wyrażenie ((low + high)/2) do obliczania myavg kolumnaobliczane.

CREATE TABLE dbo.mytable 
    ( low int, high int, myavg AS (low + high)/2 ) ;

K.Tworzenie obliczanej kolumna na podstawie typ zdefiniowany przez użytkownika kolumna

Poniższy przykład tworzy tabela o jednej kolumna zdefiniowane jako typ zdefiniowany przez użytkownika utf8string, przy założeniu, że typ wirtualny plik dziennikai typu, zostały już utworzone w bieżącej bazie danych.Druga kolumna jest definiowany na podstawie utf8stringi używa metoda ToString() z type(class)utf8string do obliczenia wartości dla kolumna.

CREATE TABLE UDTypeTable 
    ( u utf8string, ustr AS u.ToString() PERSISTED ) ;

L.Za pomocą funkcja nazwa_użytkownika dla kolumnaobliczanej

W poniższym przykładzie użyto USER_NAME() funkcja w myuser_name kolumna.

CREATE TABLE dbo.mylogintable
    ( date_in datetime, user_id int, myuser_name AS USER_NAME() ) ;

M.Tworzenie tabela ma FILESTREAM kolumna

Poniższy przykład tworzy tabela , która ma FILESTREAM kolumna Photo.Jeśli tabela ma jeden lub kilka FILESTREAM kolumny tabela musi mieć jeden ROWGUIDCOL kolumna.

CREATE TABLE dbo.EmployeePhoto
    (
    EmployeeId int NOT NULL PRIMARY KEY,
    ,Photo varbinary(max) FILESTREAM NULL
    ,MyRowGuidColumn uniqueidentifier NOT NULL ROWGUIDCOL
        UNIQUE DEFAULT NEWID()
    );

RZECZOWNIKTworzenie tabela używa kompresji wierszy

Poniższy przykład tworzy używa kompresji wiersza tabela .

CREATE TABLE dbo.T1 
(c1 int, c2 nvarchar(200) )
WITH (DATA_COMPRESSION = ROW);

Przykłady kompresji dodatkowych danych, zobacz Tworzenie skompresowanego tabel i indeksów.

O.Tworzenie tabela ma sparse kolumn i kolumna,zestaw

Poniższe przykłady pokazują, jak utworzyć zawiera rozrzedzone kolumna tabela i tabela , która ma dwie kolumny rzadkie i kolumna,zestaw. W przykładach użyto podstawowej składni.Przykłady bardziej złożone, zobacz Przy użyciu kolumn Sparse i Korzystanie z zestawów kolumny.

To przykładowe polecenie tworzy zawiera rozrzedzone kolumna tabela .

CREATE TABLE dbo.T1
    (c1 int PRIMARY KEY,
    c2 varchar(50) SPARSE NULL ) ;

To przykładowe polecenie tworzy tabela , która ma dwie kolumny rzadkie i kolumna zestaw o nazwie CSet.

CREATE TABLE T1
    (c1 int PRIMARY KEY,
    c2 varchar(50) SPARSE NULL,
    c3 int SPARSE NULL,
    CSet XML COLUMN_SET FOR ALL_SPARSE_COLUMNS ) ;