CREATE TABLE (Transact-SQL)

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 ] 

    [ SPARSE ] 

    [ NULL | NOT NULL ]
    [ 
        [ CONSTRAINT constraint_name ] DEFAULT constant_expression ] 
      | [ IDENTITY [ ( seed ,increment ) ] [ NOT FOR REPLICATION ] 
    ]
    [ ROWGUIDCOL ] [ <column_constraint> [ ...n ] ] 
<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
    Is the name of the database in which the table is created.database_name must specify the name of an existing database.Jeśli nie zostanie określona, database_name Domyślnie w bieżącej bazie danych. Identyfikator logowania dla bieżącego połączenia muszą być skojarzone z IDENTYFIKATOREM użytkownika istniejących w bazie danych określony przez database_name, a ta nazwa użytkownika musi mieć uprawnienia CREATE tabela.

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

  • table_name
    To nazwa nowej tabela.Table names must follow the rules for identifiers.table_name can be a maximum of 128 characters, except for local temporary table names (names prefixed with a single number sign (#)) that cannot exceed 116 characters.

  • column_name
    To nazwa kolumna w tabela.Column names must follow the rules for identifiers and must be unique in the table.column_name can be up to 128 characters.column_name can be omitted for columns that are created with a timestamp data type.Jeśli column_name nie jest określony, nazwa timestamp Wartość domyślna kolumna timestamp.

  • computed_column_expression
    To wyrażenie, który definiuje wartość kolumna obliczana.Kolumna obliczana jest wirtualny kolumny, która nie jest fizycznie przechowywany w tabela, chyba że kolumna jest oznaczona jako PERSISTED.Kolumna jest obliczana od wyrażenie używające innych kolumn w tej samej tabela.Na przykład kolumna obliczana może mieć definicji: Koszt AS Cena * ilość.Wyrażenie może być nazwę kolumna noncomputed, stała, funkcja, zmienna i dowolnej kombinacji tych połączone przy użyciu jednego lub kilku operatorów.Wyrażenie nie może być podkwerenda ani zawierać alias typów danych.

    Kolumny obliczane mogą być używane w wybranych list, klauzule WHERE, klauzul ORDER BY lub innej lokalizacji, w których można używać wyrażeń regularnych, z następującymi wyjątkami:

    • Nie można użyć kolumna obliczana, jako domyślny lub klucz obcy definicji ograniczenia lub przy użyciu definicji ograniczenie NOT NULL.Jednak kolumny obliczanej może służyć jako kolumna klucza w indeksie lub jako część klucz podstawowy ani ograniczenia UNIQUE, jeśli wartość kolumna obliczana jest definiowana przez wyrażenie deterministyczny i typu danych wyniku jest dozwolony w kolumny indeksu.

      For example, if the tabela has integer columns a and b, the kolumna obliczana a+b may be indexed, but kolumna obliczana a+DATEPART(dd, GETDATE()) cannot be indexed because the value may change in subsequent invocations.

    • Kolumna obliczana nie może być docelowym instrukcja INSERT lub UPDATE.

    Uwaga

    Każdy wiersz w tabela może zawierać różne wartości dla kolumn, które uczestniczą w kolumną obliczaną, więc kolumna obliczana może nie mieć tę samą wartość dla każdego wiersza.

    W zależności od wyrażenia, które są używane opcje dopuszczania wartości null z kolumny obliczane jest określana automatycznie przez Database Engine. Wynik wyrażenia większości uznaje się za nullable nawet wtedy, gdy tylko nonnullable kolumny są obecne, ponieważ możliwe underflows lub przepełnienie również dawać wyniki wartości NULL.Użyj funkcja COLUMNPROPERTY z AllowsNull właściwość, aby uzyskać więcej informacji dotyczących opcje dopuszczania wartości null dowolnej kolumna obliczana w tabela.Wyrażenie, które jest nullable mogą być uwzględniane nonnullable jeden określając ISNULL z check_expression stała, gdzie stała jest wartością niepustych zastępują wszelkie wynik wartości NULL. Materiały referencyjne uprawnienie typu jest wymagane dla kolumny obliczanej oparte na wyrażeniach typ zdefiniowany przez użytkownika (CLR) w czasie wykonywania języka wspólnego.

  • TRWAŁE
    Określa, że SQL Server Database Engine będzie fizycznie przechowywania obliczonych wartości w tabela i zaktualizować wartości, kiedy są aktualizowane inne kolumny, od których zależy kolumna obliczana. Oznaczanie kolumna obliczana jako PERSISTED pozwala utworzyć indeks dla kolumna obliczana deterministyczny, ale nie dokładne.Aby uzyskać więcej informacji zobaczTworzenie indeksów na kolumny obliczane.Any computed columns that are used as partitioning columns of a partitioned table must be explicitly marked PERSISTED.computed_column_expression must be deterministic when PERSISTED is specified.

  • ON {partition_scheme < > | filegroup | **"**domyślne " }
    Określa schemat partycji lub grupa plików, na którym jest przechowywany w tabela.Jeśli <partition_scheme> jest określony, ma być podzielone na partycje tabela partycji, których są przechowywane w tabela zestaw z jednego lub kilku filegroups określone w <partition_scheme>. Jeśli filegroup jest określony, tabela jest przechowywana w nazwaną grupa plików. grupa plików, w musi istnieć w bazie danych.Jeśli **"**domyślne " jest określona, lub jeśli ON nie jest określony we wszystkich, tabela jest przechowywana na grupa plików domyślnych.Mechanizm magazynowania tabela zgodnie z CREATE tabela nie może zostać później zmieniona.

    {<partition_scheme> | filegroup | **"**domyślne "} można również określić w ograniczenia klucz podstawowy lub UNIQUE. Ograniczenia te należy utworzyć indeksy.Jeśli filegroup jest określony, indeks jest przechowywany w nazwaną grupa plików. Jeśli **"**domyślne " jest określona, lub jeśli ON nie jest określony we wszystkich, indeks jest przechowywany w tej samej grupa plików, jak w tabela.Jeśli ograniczenia klucz podstawowy lub UNIQUE tworzy indeks klastrowany, stron danych w tabela są przechowywane w tym samym grupa plików jako indeks.Jeśli określono CLUSTERED lub ograniczenie powoduje utworzenie indeks klastrowany, a <partition_scheme> określono, że różni się od <partition_scheme> lub filegroup Definicja tabela (lub odwrotnie będzie się honorowane samej definicji ograniczenia, a drugi zostanie zignorowany.

    Uwaga

    W tym kontekście domyślnie nie jest słowem kluczowym.It is an identifier for the default filegroup and must be delimited, as in ON "default" or ON [default].Jeśli "domyślne " jest określona opcja QUOTED_IDENTIFIER musi być włączone dla bieżącej sesja.Jest to ustawienie domyślne.Aby uzyskać więcej informacji zobaczzestaw QUOTED_IDENTIFIER (języka Transact-SQL).

    Uwaga

    Po utworzeniu tabela partycjonowana, należy rozważyć ustawienie dla opcji LOCK_ESCALATION tabeli AUTO.Może to zwiększyć współbieżność, włączając blokady przekazać zgłoszenie do poziom partycji (HoBT) zamiast w tabela.Aby uzyskać więcej informacji zobaczALTER tabela (języka Transact-SQL).

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

    TEXTIMAGE_ON nie jest dozwolone, jeśli w tabela nie istnieją żadne kolumny dużą wartość.Jeśli nie można określić TEXTIMAGE_ON <partition_scheme> jest określony. Jeśli **"**domyślne " jest określona, lub jeśli TEXTIMAGE_ON nie jest określony we wszystkich, dużą wartość kolumny są przechowywane w grupa plików, w domyślnym.Przechowywanie wszystkich danych kolumna dużą wartość określona w CREATE tabela nie może zostać później zmieniona.

    Uwaga

    W tym kontekście domyślnie nie jest słowem kluczowym.It is an identifier for the default filegroup and must be delimited, as in TEXTIMAGE_ON "default" or TEXTIMAGE_ON [default].Jeśli "domyślne " jest określona opcja QUOTED_IDENTIFIER musi być włączone dla bieżącej sesja.Jest to ustawienie domyślne.Aby uzyskać więcej informacji zobaczzestaw QUOTED_IDENTIFIER (języka Transact-SQL).

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

    Jeśli tabela zawiera dane FILESTREAM tabeli jest podzielony na partycje, klauzula FILESTREAM_ON muszą być włączone i muszą określać schemat partycji z filegroups FILESTREAM.Ten schemat partycji musi mieć tę samą funkcja partycji i partycji kolumny jako schemat partycji tabela; w przeciwnym razie spowodował błąd.

    Jeśli tabela nie jest podzielony na partycje, nie mogą być podzielone na partycje kolumna FILESTREAM.FILESTREAM dane w tabela muszą być przechowywane w jedną grupa plików.Tę grupa plików jest określone w klauzula FILESTREAM_ON.

    Jeśli tabela nie jest podzielony na partycje i klauzula FILESTREAM_ON nie zostanie określona, używana jest FILESTREAM grupa plików, który ma domyślny zestaw właściwość.Jeśli nie ma żadnych FILESTREAM grupa plików, uruchamiany jest błąd.

    • Jak z ON i TEXTIMAGE_ON wartości za pomocą CREATE tabela na FILESTREAM_ON nie można zmienić, z wyjątkiem w następujących przypadkach:

    • A TWORZENIE INDEKSU instrukcja konwertuje sterty indeks klastrowany.W takim przypadek można określić na różnych FILESTREAM grupa plików, schemat partycji lub wartość NULL.

    • A USUWANIE INDEKSU instrukcja konwertuje sterty indeks klastrowany.W tym przypadek różnych FILESTREAM grupa plików, schemat partycji lub **"**domyślne " może być określony.

    grupa plików w FILESTREAM_ON <grupa plików> Klauzula lub każdą grupę FILESTREAM plików o nazwie schematu partycji musi mieć zdefiniowany dla grupa plików, w jeden plik przeznaczony. Ten plik musi być zdefiniowana przy użyciu TWORZENIE BAZY DANYCH or ZMIENIANIE BAZY DANYCH instrukcja; w przeciwnym razie spowodował błąd.

    Aby tematów pokrewnych FILESTREAM zobacz Projektowanie i wdrażanie FILESTREAM magazynu.

  • [ type_schema_name**.** ] type_name
    Określa typ danych kolumna i 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 Systemowy typ danych. Alias typy danych są tworzone przy użyciu instrukcja CREATE TYPE, zanim będą mogły być użyte w definicji tabela.Wartość NULL lub NOT NULL przydziału dla typu danych alias można zastąpić w instrukcja.Jednak nie można zmienić specyfikacji długość, długość dla typu danych alias nie może być określony w instrukcja CREATE tabela.

    • Typ zdefiniowany przez użytkownika środowiska CLR.CLR typów zdefiniowanych przez użytkownika są tworzone przy użyciu instrukcja CREATE TYPE, zanim będą mogły być użyte w definicji tabela.Aby utworzyć kolumna na zdefiniowany przez użytkownika typ danych CLR, typu jest wymagane uprawnienie materiały referencyjne.

    Jeśli type_schema_name nie jest określony, SQL Server Database Engine odwołania type_name w następującej kolejności:

    • The SQL Server system data type.

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

    • The dbo schema in the current database.

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

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

  • MAX
    Dotyczy tylko varchar, nvarchar, a varbinary typy danych do przechowywania 2 ^ 31 bajtów znaków i dane binarne 2 ^ 30 bajtów danych Unicode.

  • ZAWARTOŚĆ
    Określa, że każde wystąpienie xml Typ danych column_name może zawierać wiele elementów najwyższego poziom. CONTENT dotyczy tylko xml dane wpisz i mogą być określone tylko wtedy, gdy xml_schema_collection podano także. Jeśli tak nie jest określony, CONTENT jest zachowanie domyślne.

  • DOKUMENT
    Określa, że każde wystąpienie xml Typ danych column_name może zawierać tylko jeden element najwyższego poziom. DOKUMENT dotyczy tylko xml dane wpisz i mogą być określone tylko wtedy, gdy xml_schema_collection podano także.

  • xml_schema_collection
    Dotyczy tylko xml Typ danych do kojarzenia kolekcja schematu XML z typem. Przed wpisaniem xml kolumna do schematu, schematu należy najpierw utworzyć w bazie danych przy użyciu TWORZENIE SCHEMATU XML kolekcja.

  • WARTOŚĆ DOMYŚLNA
    Określa wartość podana kolumna, gdy wartość nie jest jawnie podany podczas wstawiania.Definicje DEFAULT można stosować do żadnych kolumn, z wyjątkiem tych, które są zdefiniowane jako timestamp, lub tych, których właściwość IDENTITY. Jeżeli określono wartość domyślną dla kolumna typ zdefiniowany przez użytkownika, typ, powinien obsługiwać niejawna konwersja z constant_expression Aby ten typ zdefiniowany przez użytkownika. Definicje DEFAULT są usuwane, gdy w tabela zostanie usunięte.Tylko stała wartości, takiej jak ciąg znaków, funkcja skalarna (system, zdefiniowane przez użytkownika, albo funkcja środowiska CLR); lub wartość NULL może służyć jako domyślny.Aby zachować zgodność ze starszymi wersjami SQL Server, nazwa ograniczenia mogą być przypisane do domyślnego.

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

  • TOŻSAMOŚĆ
    Wskazuje, że nowa kolumna kolumna tożsamości.Podczas dodawania nowego wiersza do tabela, Database Engine zawiera unikatowy, przyrostowych wartości dla kolumna. Kolumny identyfikacji są zazwyczaj używane z ograniczenia klucz podstawowy służyć jako identyfikator unikatowy wiersz w tabela.właściwość tożsamości Mogą być przypisane do tinyint, smallint, int, bigint, decimal(p,0), lub numeric(p,0) kolumny. Tylko jeden kolumna tożsamości mogą być tworzone na tabela.Wartości domyślne związane i DEFAULT ograniczeń nie mogą być używane z tożsamości kolumna.Należy określić zarówno siewnego i przyrostu lub żadna.Jeśli żadna z nich nie zostanie określony, wartość domyślna to (1,1).

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

  • increment
    Czy załadować pierwotnych wartości dodanej do wartości tożsamości w poprzednim wierszu.

  • NIE DO replikacja
    W instrukcja CREATE tabela klauzula NOT do replikacja można określić dla właściwość tożsamości, ograniczenia klucz obcy i ograniczeń CHECK.Jeśli ta klauzula jest określona dla właściwość IDENTITY agentów replikacja wykonania wstawia wartości nie są zwiększane w kolumnach identyfikacyjnych.Jeżeli określono tę klauzulę ograniczenia, ograniczenia nie są wymuszane podczas replikacja agentów wykonać wstawiania, aktualizacji lub usuwania operacji.Aby uzyskać więcej informacji zobaczKontrolowanie ograniczenia tożsamości i wyzwalaczy z nie dla replikacja.

  • ROWGUIDCOL
    Oznacza, że kolumna nowego wiersza kolumna identyfikatora GUID.Tylko jeden uniqueidentifier Kolumna tabela może być wyznaczony jako kolumna ROWGUIDCOL. Stosowanie właściwość ROWGUIDCOL umożliwia kolumna, aby odwoływać się przy użyciu $ ROWGUID.Właściwość ROWGUIDCOL mogą być przypisywane tylko do uniqueidentifier Kolumna. Słowo kluczowe ROWGUIDCOL nie jest wtedy, gdy poziom zgodności bazy danych jest 65 lub niższym.Aby uzyskać więcej informacji zobaczsp_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 kolumna.ROWGUIDCOL również nie generuje automatycznie wartości dla nowych wierszy do tabela.Do generowania unikatowych wartości dla każdej kolumna, albo użyj NEWID or NEWSEQUENTIALID funkcja na WSTAWIANIE instrukcji lub korzystania z tych funkcja jako domyślną dla kolumna.

  • RZADKIE
    Wskazuje, że w kolumnie jest kolumna rozrzedzona.Przechowywanie rozrzedzone kolumn jest zoptymalizowana ze względu na wartości null.Rzadkie kolumny nie może być wyznaczony jako NOT NULL.Dodatkowe ograniczenia i dowiedzieć się więcej na temat rozrzedzone kolumn zobacz Using Sparse Columns.

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

    Tabela musi zawierać także kolumna z uniqueidentifier Typ danych, który ma atrybut ROWGUIDCOL. W tej kolumnie nie zezwolić na wartości null i musi mieć unikatowy albo klucz podstawowy ograniczenie jedną kolumną.Wartość identyfikatora GUID dla kolumna muszą być dostarczone przez applicationwhen wstawiania danych lub przez ograniczenie domyślne, wykorzystującą funkcja NEWID ().

    Kolumny ROWGUIDCOL nie zostanie usunięty, a nie można zmienić ograniczenia pokrewnych, gdy istnieje kolumna FILESTREAM zdefiniowane w tabela.kolumna ROWGUIDCOL mogą być odrzucone, dopiero po ostatniej kolumna FILESTREAM zostanie usunięte.

    Gdy FILESTREAM magazynu jest określony dla kolumna, wszystkie wartości w tej kolumnie są przechowywane w kontenerze FILESTREAM danych w systemie plików.

  • collation_name SORTOWANIE
    Określa sortowanie dla kolumna.Collation name can be either a Windows collation name or an SQL collation name.collation_name is applicable only for columns of the char, varchar, text, nchar, nvarchar, and ntext data types.Jeśli nie zostanie określony, w kolumnie jest przypisywany sortowanie typu danych zdefiniowanego przez użytkownika, jeśli kolumna jest typu danych zdefiniowanego przez użytkownika lub domyślnym sortowaniem w bazie danych.

    Aby uzyskać więcej informacji na temat nazw sortowania systemu Windows i programu SQL zobacz Nazwa sortowanie systemu Windows and Nazwa SQL Collation (sortowanie).

    Aby uzyskać więcej informacji na temat klauzula COLLATE zobacz COLLATE (Transact-SQL).

  • OGRANICZENIA
    Jest opcjonalne słowa kluczowego, które wskazuje początek definicji ograniczenia klucz podstawowy, NOT NULL, unikatowy, klucz obcy lub wyboru.Aby uzyskać więcej informacji zobaczConstraints.

  • constraint_name
    To nazwa ograniczenia.Ograniczenie nazwy muszą być unikatowe w schemacie, do której należy tabela.

  • WARTOŚCI NULL | NIE JEST PUSTY
    Określa, czy kolumna dozwolone są wartości null.Wartość NULL nie jest ściśle związana z ograniczeniem, ale mogą być określane tak samo jak NOT NULL.NOT NULL można określić dla kolumny obliczane tylko wtedy, gdy określony jest również PERSISTED.

  • KLUCZ PODSTAWOWY
    Jest ograniczenie, które wymusza integralność obiekt dla określonej kolumna lub kolumn do indeks unikatowy.Mogą być tworzone tylko jeden ograniczenia klucz podstawowy dla tabela.

  • UNIKATOWE
    Jest ograniczenie, które zapewnia integralność obiekt dla określonej kolumna lub kolumn do unikatowego indeksu.Tabela może zawierać wiele ograniczeń UNIQUE.

  • ZGROMADZONE | NIEKLASTROWANY
    Wskazuje, że klastrowany lub nieklastrowany indeks jest tworzony dla ograniczenia klucz podstawowy lub UNIQUE.Ustawienie domyślne ograniczenia klucz podstawowy CLUSTERED i ograniczeń UNIQUE domyślnie NONCLUSTERED.

    W instrukcja CREATE tabela CLUSTERED może wybrać tylko jedno ograniczenie.Jeśli określony jest również ograniczenia klucz podstawowy CLUSTERED został określony dla ograniczenia typu UNIQUE, domyślnie NONCLUSTERED klucz podstawowy.

  • ODWOŁANIA DO klucz obcy
    Jest ograniczenie, które zapewnia więzów integralność danych w kolumna lub kolumn.klucz obcy ograniczenia wymagają, że każda wartość kolumna istnieje w odpowiedniej odwołania kolumna lub kolumn w tabela, do którego istnieje odwołanie.Ograniczenia klucz obcy może odwoływać się tylko te kolumny, które są ograniczenia klucz podstawowy lub UNIQUE tabela, do którego istnieje odwołanie lub kolumny, do którego odwołuje się indeks unikatowy oparty na tabela, do którego istnieje odwołanie.Klucze obce w kolumny obliczane muszą również być oznakowane PERSISTED.

  • [ schema_name**.**] referenced_table_name]
    To nazwa odwołuje się ograniczenie klucz obcy i schematu, do której należy tabela.

  • **(**ref_column [ ,... n ] )
    Jest to kolumna lub lista kolumn z tabela odwołuje się ograniczenie klucz obcy.

  • ON DELETE {BRAK akcja | CASCADE | zestaw NULL | zestaw DEFAULT}
    Określa, jaka akcja stanie się z wierszy w tabela utworzony, jeśli te wiersze relacji więzy i do których istnieją odwołania wiersza zostanie usunięty z tabela nadrzędnej.Wartością domyślną jest NO Akcja.

    • BRAK akcja
      The Database Engine raises an error and the delete akcja on the row in the parent tabela is rolled back.

    • KASKADOWO
      Odpowiednie wiersze są usuwane z tabela odwołujący się usunięcie tego wiersza z tabela nadrzędnej.

    • zestaw NULL
      Wszystkie wartości wchodzące w skład klucz obcy są zestaw wartość null, jeśli zostanie usunięty odpowiedni wiersz w tabela nadrzędnej.To ograniczenie do wykonać kolumny klucz obcy musi być niewymaganym.

    • zestaw DOMYŚLNE
      Wszystkie wartości wchodzące w skład klucz obcy są zestaw do wartości domyślnych, jeżeli zostanie usunięty odpowiedni wiersz w tabela nadrzędnej.To ograniczenie wykonać wszystkie kolumny klucz obcy musi posiadać domyślnej definicji.Jeżeli kolumna jest pustych, a nie ma żadnych jawnych domyślny zestaw wartości, NULL staje się oczywiste domyślna wartość w kolumnie.

    Nie należy określać CASCADE, jeśli w tabela mają zostać uwzględnione w publikacja korespondencji seryjnej, która korzysta z logicznego rekordów.Aby uzyskać więcej informacji o rekordach logiczny zobacz Grupowanie zmiany pokrewne wiersze z rekordami logicznych.

    ON DELETE CASCADE nie mogą być definiowane Jeśli wyzwalacz Z INSTEAD ON DELETE już tabela.

    Na przykład w AdventureWorks Baza danych, ProductVendor tabela jest w relacji więzy z Dostawcy tabela.The ProductVendor.VendorID klucz obcy references the Vendor.VendorID klucz podstawowy.

    Jeśli Instrukcja DELETE jest wykonywane w wierszu w Dostawcy określonej dla tabela i ON DELETE CASCADE akcjaProductVendor.VendorID, the Database Engine sprawdza, czy jeden lub więcej wierszy zależne w ProductVendor tabela.Ile zależnego od wierszy w ProductVendor tabela są usuwane, a także w odwołanie do wierszaDostawcy tabela.

    I odwrotnie, jeśli akcja nie jest określony, Database Engine zgłasza błąd i powoduje powrót akcji usuwania Dostawcy wiersza, jeśli istnieje co najmniej jeden wiersz w ProductVendor tabela, która odwołuje się go.

  • ON UPDATE {BRAK akcja | CASCADE | zestaw NULL | zestaw DEFAULT}
    Określa, jakie akcja stanie się z wierszy w tabela zmieniona podczas tych wierszy, mają relacji więzy i do których istnieją odwołania wiersza jest aktualizowana w tabela nadrzędnej.Wartością domyślną jest NO Akcja.

    • BRAK akcja
      The Database Engine raises an error, and the update akcja on the row in the parent tabela is rolled back.

    • KASKADOWO
      Odpowiednie wiersze są aktualizowane w tabela odwołujący się podczas aktualizowania tego wiersza w tabela nadrzędnej.

    • zestaw NULL
      Wszystkie wartości wchodzące w skład klucz obcy są zestaw wartości null podczas aktualizacji odpowiedniego wiersza w tabela nadrzędnej.To ograniczenie do wykonać kolumny klucz obcy musi być niewymaganym.

    • zestaw DOMYŚLNE
      Wszystkie wartości wchodzące w skład klucz obcy są ustawione na wartości domyślne podczas aktualizacji odpowiedniego wiersza w tabela nadrzędnej.To ograniczenie wykonać wszystkie kolumny klucz obcy musi posiadać domyślnej definicji.Jeżeli kolumna jest pustych, a nie ma żadnych jawnych domyślny zestaw wartości, NULL staje się oczywiste domyślna wartość w kolumnie.

    Nie należy określać CASCADE, jeśli w tabela mają zostać uwzględnione w publikacja korespondencji seryjnej, która korzysta z logicznego rekordów.Aby uzyskać więcej informacji o rekordach logiczny zobacz Grupowanie zmiany pokrewne wiersze z rekordami logicznych.

    ON UPDATE CASCADE nie mogą być definiowane Jeśli wyzwalacz Z INSTEAD ON UPDATE już tabela, która jest są zmieniane.

    Na przykład w AdventureWorks Baza danych, ProductVendor tabela jest w relacji więzy z Dostawcy tabela: ProductVendor.VendorID odwołuje się klucz obcy Vendor.VendorID klucz podstawowy.

    Jeśli instrukcja UPDATE jest wykonywane w wierszu w Dostawcy określonej dla tabela i akcja ON UPDATE CASCADEProductVendor.VendorID, the Database Engine sprawdza, czy jeden lub więcej wierszy zależne w ProductVendor tabela.Ile zależnego od wierszy w ProductVendor tabela są aktualizowane, a także w odwołanie do wierszaDostawcy tabela.

    I odwrotnie, jeśli akcja nie jest określony, Database Engine zgłasza błąd i powoduje powrót akcję aktualizacji Dostawcy wiersza, jeśli istnieje co najmniej jeden wiersz w ProductVendor tabela, która odwołuje się go.

  • SPRAWDŹ
    Jest ograniczenie, które wymusza integralność domena, ograniczając możliwych wartości, które mogą być wprowadzane do kolumna lub kolumn.Sprawdź ograniczenia dla kolumny obliczanej również muszą być oznakowane PERSISTED.

  • logical_expression
    To wyrażenie logiczne, które zwraca wartość TRUE lub FALSE.Typy danych alias nie może być częścią wyrażenie.

  • column
    Jest to kolumna lub listę kolumn w nawiasach, używana w tabela ograniczeń w celu wskazania kolumn, używana w definicji ograniczenia.

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

  • partition_scheme_name
    Jest nazwą schemat partycji, która definiuje filegroups, na którym będą mapowane partycji tabela partycjonowana.Schemat partycji musi znajdować się w bazie danych.

  • [ partition_column_name**.** ]
    Określa kolumna, w którym podzielonym na partycje tabela będzie można podzielić na partycje.Kolumna musi odpowiadać określona w tej partycji, działać partition_scheme_name korzysta z typem danych, długość i dokładności. Kolumny obliczane, który uczestniczy w funkcja partycji musi być wyraźnie oznaczony PERSISTED.

    Important noteImportant Note:

    Firma Microsoft zaleca, aby określić NOT NULL na cele operacji instrukcji ALTER tabela... przełącznik lub partycjonowanie na partycje kolumna tabel podzielonym na partycje, a także nonpartitioned tabel, które są źródeł.W ten sposób tworzy się, że wszelkie ograniczenia CHECK na podział kolumny nie mają Sprawdź, czy wartości null.Aby uzyskać więcej informacji zobaczWydajne przesyłania danych przy użyciu przełączania partycji.

  • WITH FILLFACTOR **=**fillfactor
    Określa, w jaki sposób pełnej Database Engine Upewnij się każdej strona indeksu, który jest używany do przechowywania danych indeksu. Określone przez użytkownika fillfactor wartości mogą być od 1 do 100. Jeżeli nie określono wartości, wartość domyślna jest równa 0.Wypełnienie współczynnik wartości 0 i 100 są takie same w każdym względem.

    Important noteImportant Note:

    Dokumentowanie WITH FILLFACTOR = fillfactor zwalnia to jedyna opcja indeksu dotyczy klucz podstawowy lub UNIQUE ograniczenia jest przechowywana w celu zapewnienia zgodności z poprzednimi wersjami, ale nie będzie nie udokumentowane w ten sposób w przyszłości.

  • column_set_name ALL_SPARSE_COLUMNS DLA COLUMN_SET XML
    Jest to nazwa kolumna zestawu.Zestaw kolumn jest bez typu reprezentacji XML, który łączy wszystkie rozrzedzone kolumna tabela w strukturze danych wyjściowych.Aby uzyskać więcej informacji na temat kolumna zestawów, zobacz Korzystanie z zestawów kolumna.

  • table_option < >:: =
    Określa jedną lub kilka opcji tabela.

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

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

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

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

    Aby uzyskać więcej informacji dotyczących kompresji zobacz Creating Compressed Tables and Indexes.

  • ON PARTITIONS ( { <partition_number_expression> | <range> } [ ,...n ] )
    Określa, do których stosuje się ustawienie DATA_COMPRESSION partycji.Jeśli tabela nie jest podzielony na partycje, argument na PARTYCJE spowoduje wystąpienie błędu.Jeśli klauzula ON PARTYCJI nie zostanie podana, opcja DATA_COMPRESSION będą stosowane 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 pojedynczych partycji, oddzielając je średnikami, na przykład numerów partycji: NA PARTYCJACH (1, 5).

    • Zapewniają zarówno zakresów, jak i poszczególnych partycji, na przykład: NA PARTYCJI (2, 4, 6 do 8)

    <zakres> można określić jako liczby partycji, oddzielając słowa do, na przykład: NA PARTYCJACH (OD 6 DO 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 jedną lub więcej opcji indeksu.Pełny opis tych opcji zobacz CREATE INDEX (języka Transact-SQL).

  • PAD_INDEX = {ON | WYŁĄCZANIE }
    ON, procent wolnego miejsca, określony przez zastosowanie FILLFACTOR do pośredniego strony poziom indeksu.Gdy OFF lub FILLFACTOR wartość go nie określono, pośrednie strony poziom są wypełnione bliskiej zdolności produkcyjnych, pozostawiając wystarczająco dużo miejsca na co najmniej jeden wiersz maksymalnego rozmiaru indeksu może mieć, biorąc pod uwagę zestaw kluczy na stronach pośrednich.Wartością domyślną jest OFF.

  • FILLFACTOR **=**fillfactor
    Specifies a percentage that indicates how full the Database Engine should make the leaf level of each index page during index creation or alteration.fillfactor must be an integer value from 1 to 100.Wartość domyślna to 0.Wypełnienie współczynnik wartości 0 i 100 są takie same w każdym względem.

  • IGNORE_DUP_KEY = {ON | WYŁĄCZANIE }
    Określa odpowiedź o błędzie podczas próby wstawienia duplikat operację wstawiania klucz wartości do unikatowego indeksu.Opcja IGNORE_DUP_KEY dotyczy tylko wstawianie operacji po utworzeniu indeksu lub ponownie.Opcja jest ignorowany podczas wykonywania TWORZENIE INDEKSU, ZMIANA INDEKSU, or AKTUALIZACJA.Wartością domyślną jest OFF.

    • DALEJ
      Komunikat ostrzegawczy zostanie przeprowadzona, gdy zduplikowane klucz wartości są wstawiane do unikatowego indeksu.Tylko wiersze naruszenie ograniczenia unikatowości nie powiedzie się.

    • WYŁĄCZANIE
      Komunikat o błędzie będzie występować wówczas, gdy zduplikowane wartości kluczy są wstawiane do unikatowego indeksu.Całą operację WSTAWIANIA będzie można wycofać.

    Nie może być IGNORE_DUP_KEY zestaw on indeksy utworzone na widok, Indeksy nieunikatowe, indeksy XML, przestrzennej indeksy i filtrowane indeksów.

    Aby wyświetlić IGNORE_DUP_KEY, należy użyć sys.Indexes.

    W składni zgodne ze starszymi wersjami, jest równoważne Z IGNORE_DUP_KEY WITH IGNORE_DUP_KEY = ON.

  • STATISTICS_NORECOMPUTE = { ON | WYŁĄCZANIE }
    Kiedy ON nieaktualny indeks statystyki nie są automatycznie przeliczane.Jeżeli OFF, aktualizacji automatycznych statystyk są włączone.Wartością domyślną jest OFF.

  • ALLOW_ROW_LOCKS = { DALEJ | OFF }
    Kiedy ON, blokad wiersza są dozwolone podczas dostępu do indeksu.The Database Engine determines when row locks are used.Kiedy OFF, wiersz blokady nie są używane.Wartością domyślną jest włączone.

  • ALLOW_PAGE_LOCKS = { DALEJ | OFF }
    Kiedy ON, blokad strona są dozwolone podczas dostępu do indeksu.The Database Engine determines when strona locks are used. Kiedy OFF, blokad strona nie są używane.Wartością domyślną jest włączone.

Remarks

SQL Server 2008 może mieć maksymalnie 2 miliard tabel dla bazy danych.tabela zawierającej kolumna zdefiniowanych zestawów, może mieć maksymalnie 30,000 kolumn z maksymalnie 1024 sparse + kolumna obliczane.Tabele, które nie mają zestawy kolumn jest ograniczona do 1024 kolumn.Liczby wierszy oraz całkowity rozmiar tabela jest ograniczony tylko przez dostępne magazynu.Maksymalna liczba bajtów w wierszu jest 8,060.To ograniczenie jest złagodzone dla tabel z varchar, nvarchar, varbinary, lub sql_variant kolumny, które powodują szerokość tabela zdefiniowaną całkowita 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 8,060 bajt w tabela.Aby uzyskać więcej informacji zobaczRow-Overflow Data Exceeding 8 KB.

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

Miejsce na ogół zostanie przydzielona do tabel i indeksów w przyrostach jednego fragment przy czas.Podczas tworzenia tabela lub indeksu go przydzielono stron z zakresów mieszanych dopóki nie ma wystarczająco dużo stron na wypełnienie jednolite fragment.Po ma wystarczająco dużo stron na wypełnienie jednolite fragment, fragment innego są przydzielane przy każdym aktualnie przydzielonych zakresów staną się pełne.Dla raportu dotyczącego ilości miejsca na przydzielone i używane przez tabela wykonać sp_spaceused.

The Database Engine does not enforce an order in which DEFAULT, IDENTITY, ROWGUIDCOL, or kolumna constraints are specified in a kolumna definition.

Podczas tworzenia tabela IDENTIFIER PODANA opcja jest zawsze przechowywane jako ON metadane dla tabela, nawet wtedy, gdy opcja ta zestaw do OFF podczas tworzenia tabela.

Tabele tymczasowe

Istnieje możliwość utworzenia tabel tymczasowych lokalne i globalne.Lokalne tabele tymczasowe są widoczne tylko w bieżącej sesja i tabel tymczasowych globalne są widoczne dla wszystkich sesja.Nie można podzielić na partycje tabel tymczasowych.

Prefiks nazwy lokalnej tabela tymczasowa o jeden znak numeru (#table_name), a prefiks globalny tabela tymczasowa nazwy z podwójnym znakiem numeru (##table_name).

instrukcja SQL odwołać się za pomocą wartość określona dla tabela tymczasowa table_name w instrukcja CREATE TABLE, na przykład:

Jeśli więcej niż jedna tabela tymczasowa jest tworzony w jednym procedura przechowywana lub program wsadowy, muszą mieć różne nazwy.

Jeśli utworzono lokalnej tabela tymczasowa w procedurze przechowywanej lub aplikacji, które mogą być wykonywane w tym samym czas przez kilku użytkowników Database Engine musi być w stanie odróżnić tabele utworzone przez innych użytkowników. The Database Engine does this by internally appending a numeric suffix to each local tabela tymczasowa name. Imię i nazwisko jako przechowywanych w tabela tymczasowa sysobjects table in tempdb składa się z nazwy tabeli, określone w instrukcja CREATE TABLE i wygenerowane przez system sufiksu numerycznego.Aby umożliwić sufiks, table_name określony dla lokalnego tymczasowa nazwa nie może przekraczać 116 znaków.

Tabele tymczasowe są automatycznie usuwane, gdy przejdą poza zakresem, o ile jawnie usunięte za pomocą DROP tabela:

  • Lokalnej tabela tymczasowa utworzone w procedurze przechowywanej zostanie automatycznie usunięte po zakończeniu procedura przechowywana.W tabela można się odwoływać za zagnieżdżonych procedur przechowywanych wykonywane przez procedura przechowywana, utworzone w tabela.Proces o nazwie procedura przechowywana, utworzone w tabela nie odwołuje się do tabela.

  • Wszystkie inne lokalne tabele tymczasowe są usuwane automatycznie po zakończeniu bieżącej sesja.

  • Globalne tabele tymczasowe są automatycznie usuwane po zakończeniu sesja utworzonych w tabela i wszystkie inne zadania przestał odwoływania się do nich.Skojarzenie między zadaniem i tabela jest obsługiwana tylko na czas trwania pojedynczej Transact-SQL Instrukcja. Oznacza to, że globalne tymczasowej tabela zostanie usunięte po zakończeniu ostatniego Transact-SQL instrukcja została aktywnie odwołanie do tabela, podczas tworzenia sesja została zakończona.

Utworzone lokalnej tabela tymczasowa w procedurze przechowywanej lub wyzwalacz może mieć taką samą nazwę jak tabela tymczasowa, który został utworzony przed procedura przechowywana lub nosi nazwę wyzwalacza.Jednak jeśli kwerendy odwołuje się do tabela tymczasowa i dwie tabele tymczasowe o takiej samej nazwie istnieje w których czas, nie zostało zdefiniowane, tabelę, z której kwerenda zostanie rozwiązany przed.Zagnieżdżone procedur przechowywanych, można tworzyć tabele tymczasowe z taką samą nazwę jak tabela tymczasowa, która została utworzona przez procedura przechowywana, która ją wywołała.Jednak do modyfikacji w celu rozwiązania do tabeli, która została utworzona w procedurze zagnieżdżone, tabela musi zawierać tę samą strukturę, z tym samym kolumna nazwy, jak tabela, utworzonego w procedurze wywołującej.Pokazano to na przykładzie poniżej.

Here is the result set.

(1 row(s) affected)

Test1Col    
----------- 
1           

(1 row(s) affected)

Test2Col    
----------- 
2           

Podczas tworzenia tabel tymczasowych w lokalnej lub globalnej składni CREATE tabela obsługuje definicje ograniczenie z wyjątkiem ograniczeń klucz obcy.Jeżeli określono ograniczenie klucz obcy tabela tymczasowa, instrukcja zwraca komunikat ostrzegawczy informujący, że ograniczenie zostało pominięte.W tabela nadal jest tworzona bez ograniczeń klucz obcy.Nie można się odwoływać tabel tymczasowych w ograniczenia klucz obcy.

Zaleca się korzystanie ze zmiennych Tabela zamiast w tabelach 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.Ogólnie rzecz biorąc zmienne Tabela przyczynić się do wydajniejsze przetwarzanie kwerendy.Aby uzyskać więcej informacji zobaczTabela (języka Transact-SQL).

Tabele podzielonym na partycje

Przed utworzeniem tabela partycjonowana przy użyciu CREATE TABLE, należy najpierw utworzyć funkcja partycji, aby określić, jak w tabeli zostanie podzielony na partycje.Funkcja partycja jest tworzona przy użyciu TWORZENIE funkcja partycji.Po drugie należy utworzyć schemat partycji w celu określenia filegroups, przechowujące wskazanych przez funkcja partycja partycje.Schemat partycji jest tworzona przy użyciu TWORZENIE PARTYCJI SCHEMATU.Nie można określić położenie ograniczenia klucz podstawowy lub UNIQUE, aby oddzielić filegroups tabel podzielonym na partycje.Aby uzyskać więcej informacji zobaczTabele podzielonym na partycje i indeksów.

Ograniczenia klucz podstawowy

  • Tabela może zawierać tylko jeden ograniczenia klucz podstawowy.

  • Indeks utworzony przez ograniczenia klucz podstawowy, nie może spowodować, że liczba indeksów w tabela, aby przekracza 999 ponownego zbudowania indeksów nie klastrowanych i 1 indeks klastrowany.

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

  • Wszystkie kolumny zdefiniowane w ograniczenia klucz podstawowy musi być zdefiniowany jako NOT NULL.Jeśli opcje dopuszczania wartości null nie zostanie określony, wszystkie kolumny wchodzące w ograniczenia klucz podstawowy mają ich opcje dopuszczania wartości null wartość NOT NULL.

  • Jeśli klucz podstawowy jest zdefiniowany w CLR typ zdefiniowany przez użytkownika kolumna, wykonanie tego typu musi obsługiwać binarne kolejności.Aby uzyskać więcej informacji zobaczŚrodowisko CLR Typy definiowane przez użytkownika.

Ograniczenia UNIQUE

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

  • Każde ograniczenie UNIQUE generuje indeks.Liczby ograniczeń UNIQUE, nie może spowodować, że liczba indeksów w tabela, aby przekracza 999 ponownego zbudowania indeksów nie klastrowanych i 1 indeks klastrowany.

  • Jeśli ograniczenie typu unique jest zdefiniowany w zdefiniowany przez użytkownika typ danych CLR kolumna, wykonanie tego typu musi obsługiwać binarny lub operator kolejności.Aby uzyskać więcej informacji zobaczŚrodowisko CLR Typy definiowane przez użytkownika.

klucz obcy ograniczenia

  • Po wprowadzeniu na wartość inną niż NULL do kolumna ograniczenie klucz obcy wartość musi istnieć kolumna, której dotyczy odwołanie; w przeciwnym razie zwracany jest komunikat o błędzie naruszenia klucz obcy.

  • klucz obcy ograniczenia są stosowane do poprzedniej kolumna, o ile nie określono źródłowych kolumn.

  • Ograniczenia klucz obcy może odwoływać się tylko tabele w obrębie tej samej bazy danych na tym samym serwerze.Więzy integralność bazy danych między należy wprowadzić za pomocą wyzwalaczy.Aby uzyskać więcej informacji zobaczCREATE TRIGGER (języka Transact-SQL).

  • Ograniczenia klucz obcy można odwoływać się do innej kolumna w tej samej tabela.To jest nazywane self-reference.

  • Klauzula materiały referencyjne ograniczenie klucz obcy poziom kolumny mogą zawierać tylko jedna kolumna odwołania.W tej kolumnie musi mieć dane tego samego typu co dla kolumna, na którym zdefiniowane jest ograniczenie.

  • Klauzula materiały referencyjne ograniczenie klucz obcy poziom tabela musi mieć taką samą liczbę kolumn odwołania jako liczbę kolumn na liście kolumn ograniczenie.Typ danych każdej kolumna odwołania również musi być taka sama, jak odpowiadające im kolumna na liście kolumn.

  • Nie można określić CASCADE, zestaw NULL lub zestaw DEFAULT Jeśli kolumna typu timestamp jest częścią klucz obcy lub klucz występujący w odwołaniu.

  • CASCADE, zestaw NULL, zestaw DEFAULT i akcja nie może być łączone w tabelach, które tworzą relacji więzy ze sobą.Jeśli Database Engine wystąpi akcja nie zatrzyma się i powoduje powrót powiązanych akcji CASCADE, zestaw NULL i zestaw DEFAULT. Jeśli Instrukcja DELETE powoduje, że kombinacja CASCADE, zestaw NULL, zestaw DEFAULT i Akcja NO akcji, wszystkie CASCADE zestaw NULL i zestaw DEFAULT akcje są stosowane przed Database Engine sprawdza, czy wszystkie Akcja NO.

  • The Database Engine does not have a predefined limit on either the number of klucz obcy constraints a tabela can contain that reference other tables, or the number of klucz obcy constraints that are owned by other tables that reference a specific tabela.

    Niemniej jednak rzeczywista liczba klucz obcy ograniczenia, które mogą być używane jest ograniczone przez konfiguracja sprzętu i projektowania bazy danych i aplikacji.Zaleca się, że tabela ma zawierać nie więcej niż 253 ograniczenia klucz obcy i że się odwoływać za nie więcej niż 253 ograniczenia klucz obcy.Skuteczne limitu dla użytkownika może być więcej lub mniej, w zależności od aplikacji i sprzętu.Należy wziąć pod uwagę koszt wymuszanie ograniczeń klucz obcy podczas projektowania swoją bazę danych i aplikacji.

  • klucz obcy ograniczenia nie są wymuszane na tabelach tymczasowych.

  • Ograniczenia klucz obcy może odwoływać się tylko kolumny w klucz podstawowy lub UNIQUE ograniczeń w tabela, do którego istnieje odwołanie lub UNIKATOWEGO INDEKSU na tabela, do którego istnieje odwołanie.

  • Klucz obcy jest zdefiniowana w odniesieniu do środowiska CLR kolumna typ zdefiniowany przez użytkownika, wykonanie tego typu musi obsługiwać binarne kolejności.Aby uzyskać więcej informacji zobaczŚrodowisko CLR Typy definiowane przez użytkownika.

  • Kolumna typu varchar(max) może także uczestniczyć w ograniczenie klucz obcy tylko wtedy, gdy odwołuje się klucz podstawowy jest również zdefiniowany jako typ varchar(max).

Definicje DEFAULT

  • kolumna może mieć tylko jedną definicję DEFAULT.

  • DOMYŚLNĄ definicją może zawierać wartości stałych, funkcji, funkcje bez parametrów SQL-92 lub wartość NULL.W poniższej tabela przedstawiono wartości, zwraca domyślną w instrukcja INSERT i funkcje bez parametrów.

    Funkcja SQL-92 zerowych

    Wartość zwracana

    CURRENT_TIMESTAMP

    Bieżąca data i godzina.

    CURRENT_USER

    Nazwa użytkownika, wykonuje wstawiania.

    SESSION_USER

    Nazwa użytkownika, wykonuje wstawiania.

    SYSTEM_USER

    Nazwa użytkownika, wykonuje wstawiania.

    UŻYTKOWNIK

    Nazwa użytkownika, wykonuje wstawiania.

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

  • Definicje DEFAULT nie można utworzyć na podstawie kolumn z timestamp Typ danych lub kolumn, których właściwość tożsamości.

  • Nie można utworzyć definicje DEFAULT w wypadku kolumn o typach danych alias, jeśli typ danych alias jest powiązany z domyślnego obiektu.

Ograniczenia CHECK

  • Kolumna może zawierać dowolną liczbę ograniczeń typu CHECK, a warunek może zawierać wiele wyrażeń logicznych w połączeniu z AND i OR.Wiele ograniczeń typu CHECK dla kolumna są sprawdzane w kolejności ich tworzenia.

  • Warunek wyszukiwania musi dawać w wyniku wyrażenie warunkowe i nie mogą odwoływać się do innej tabela.

  • Ograniczenie typu CHECK poziomie kolumna mogą odwoływać się tylko ograniczony kolumna i ograniczenia CHECK do tabela poziom może odwoływać się tylko do kolumn w tej samej tabela.

    Sprawdź ograniczenia i reguły pełnią te same funkcje sprawdzania poprawności danych w instrukcji INSERT i UPDATE.

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

  • Nie można zdefiniować ograniczeń CHECK na text, ntext, lub image kolumny.

Dodatkowe informacje dotyczące ograniczenia

  • Nie można go usunąć indeks utworzony ograniczenia przy użyciu DROP INDEX; ograniczenie musi być odrzucone, za pomocą instrukcji ALTER tabela.Indeks utworzony dla i używanych przez ograniczenie może być przebudowany przy użyciu DBCC DBREINDEX.

  • Ograniczenie nazwy muszą być zgodne z zasadami identyfikatory, z tą różnicą, że nazwa nie może rozpoczynać się znakiem numeru (#).Jeśli constraint_name to nie jest podany, wygenerowane przez system nazwę jest przypisany do ograniczenia. Nazwa ograniczenia pojawia się w dowolnym komunikat o błędzie o naruszeniach ograniczeń dotyczących.

  • Jeśli ograniczenie jest naruszone w instrukcja INSERT, UPDATE lub DELETE, w instrukcja jest zakończona.Jednak po zestaw XACT_ABORT ma wartość OFF, transakcji, jeśli w instrukcja jest częścią transakcja jawna kontynuuje przetwarzanie.zestaw XACT_ABORT jest ustawiona na ON, cała transakcja jest cofana.Instrukcja ROLLBACK TRANSACTION można użyć z definicją transakcji, sprawdzając **@@**Błąd funkcja systemowej.

  • Gdy ALLOW_ROW_LOCKS = ON i ALLOW_PAGE_LOCK = ON, wiersz, strona- a blokowania poziom tabela jest niedozwolone po uzyskaniu dostępu indeksu.The Database Engine chooses the appropriate blokada and can escalate the blokada from a row or strona blokada to a tabela blokada. Aby uzyskać więcej informacji zobaczeskalacja blokad (aparat bazy danych).Gdy ALLOW_ROW_LOCKS = OFF i ALLOW_PAGE_LOCK = OFF, blokada poziomie tabela jest dopuszczalna, gdy dostęp do indeksu.Aby uzyskać więcej informacji na temat konfigurowania blokowania ziarnistość indeksu zobacz Customizing Locking for an Index.

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

W przypadku raportu tabela i jej kolumn należy użyć sp_help or sp_helpconstraint.Aby zmienić nazwę tabela, należy użyć sp_rename.W przypadku raportu na temat widoków i procedur przechowywanych, które zależą od tabela za pomocą sys.dm_sql_referenced_entities and sys.dm_sql_referencing_entities.

Reguły opcje dopuszczania wartości null w ramach definicji tabela

opcje dopuszczania wartości null kolumny określa, czy ta kolumna może zezwalać na wartość null wartość (NULL) jako dane w tej kolumnie.Wartość NULL nie jest zero lub pusty: Wartość NULL oznacza, że zapis nie został utworzony lub podano jawne NULL i oznacza zwykle, że wartość jest albo nieznana, albo nie ma zastosowania.

Gdy używasz CREATE tabela lub ALTER tabela, aby utworzyć lub zmodyfikować tabela, ustawienia bazy danych i sesja wpływ i prawdopodobnie zastępują opcje dopuszczania wartości null typu danych, który jest używany w kolumna definicji.Firma Microsoft zaleca, aby zawsze jawnie zdefiniować kolumna jako wartość NULL lub NOT NULL noncomputed kolumn lub, jeśli używany jest typ danych zdefiniowany przez użytkownika, zezwolić na kolumna, aby użyć opcje dopuszczania wartości null domyślnego typu danych.Rzadkie kolumn musi zawsze Zezwalaj na wartości NULL.

Jeżeli nie określono jawnego opcje dopuszczania wartości null kolumna, opcje dopuszczania wartości null kolumna następują reguły, pokazane w poniższej tabela.

Typ danych kolumna

Reguły

Alias typ danych

The Database Engine uses the opcje dopuszczania wartości null that is specified when the data type was created. Aby ustalić opcje dopuszczania wartości null domyślnego typu danych, należy użyć sp_help.

zdefiniowany przez użytkownika typ danych CLR

opcje dopuszczania wartości null jest określana zgodnie z definicją kolumna.

Typ danych dostarczanych przez system

If the system-supplied data type has only one option, it takes precedence.timestamp data types must be NOT NULL.

Gdy wszystkie ustawienia sesja zostały ustawione w przy użyciu zestaw:

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

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

  • Gdy wszystkie ustawienia bazy danych są konfigurowane przy użyciu instrukcji ALTER DATABASE:

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

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

  • Aby wyświetlić ustawienia w bazie danych dla ANSI_NULL_DEFAULT, należy użyć sys.Databases wyświetlanie katalogu

Wtedy, gdy żadna z opcji ANSI_NULL_DFLT jest zestaw do sesja i bazy danych jest zestaw domyślne (ANSI_NULL_DEFAULTis OFF), domyślnie nie jest przypisana wartość NULL.

Jeśli kolumna jest kolumna obliczana, jego opcje dopuszczania wartości null zawsze automatycznie jest określany przez Database Engine. Aby dowiedzieć się, opcje dopuszczania wartości null tego typu kolumna, należy użyć funkcja COLUMNPROPERTY z AllowsNull właściwość.

Uwaga

Sterownik ODBC dla programu SQL Server i Microsoft OLE DB dostawca for SQL Server domyślnie obie o ANSI_NULL_DFLT_ON zestaw on.ODBC i OLE DB użytkownicy mogą konfigurować tego źródła danych ODBC lub z atrybutów połączenia lub właściwości zestaw przez aplikację.

Kompresja danych

Tabele systemowe nie można włączyć kompresję.Podczas tworzenia tabela kompresja danych jest ustawiona wartość NONE, chyba że określono inaczej.Jeżeli podano listę partycji lub partycji, która jest poza zakresem, zostanie wygenerowany błąd.Aby uzyskać więcej informacji dotyczących kompresji danych zobacz Creating Compressed Tables and Indexes.

Aby ocenić, jak zmiana stanu kompresji wpłynie na tabela, indeks lub partycji, należy użyć sp_estimate_data_compression_savings procedura przechowywana.

Uprawnienia

Wymaga uprawnienia CREATE tabela w bazie danych i ALTER uprawnienia zdefiniowane w schemacie, w którym jest tworzony w tabela.

Jeżeli wszystkie kolumny w tworzenia tabela instrukcja są definiowane za CLR, zdefiniowane przez użytkownika, wpisz albo własności tego typu lub wymagane jest uprawnienie materiały referencyjne.

Jeżeli wszystkie kolumny w tworzenia tabela instrukcja mieć kolekcja schematu XML skojarzonych z nimi, wymagane jest prawo własności kolekcja schematu XML albo uprawnienie materiały referencyjne.

Przykłady

A.Za pomocą ograniczenia klucz podstawowy

W poniższym przykładzie przedstawiono w definicji kolumn z indeksem klastrowanym ograniczenia klucz podstawowy EmployeeID Kolumna Employee Tabela (Zezwalanie systemu, aby podać nazwę ograniczenia) w AdventureWorks Przykładowa baza danych.

EmployeeID int
PRIMARY KEY CLUSTERED

B.Za pomocą ograniczeń klucz obcy

Ograniczenie klucz obcy można odwołać innej tabela.Klucze obce mogą być jedno-kolumna kluczy lub multi kolumna kluczy.To następujący przykład przedstawia jedno-kolumna obcych ograniczenie klucz SalesOrderHeader Tabela, która odwołuje się SalesPerson Tabela. Klauzula materiały referencyjne jest wymagane w przypadku jedno-kolumna obcych tylko ograniczenia klucz.

SalesPersonID int NULL
REFERENCES SalesPerson(SalesPersonID)

Można także jawnie używać klauzula klucz obcy i potwierdzić kolumna atrybut.Należy zwrócić uwagę, że nazwy kolumn nie ma takie same w obu tabelach.

FOREIGN KEY (SalesPersonID) REFERENCES SalesPerson(SalesPersonID)

Ograniczenia na klucz wielokolumnowego są tworzone jako warunki ograniczające tabela.W AdventureWorks Baza danych, SpecialOfferProduct Tabela zawiera wielokolumnowego klucz podstawowy. W poniższym przykładzie przedstawiono sposób odwoływać ten klucz z innej tabela, o nazwie ograniczenie jawne jest opcjonalne.

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

C.Za pomocą ograniczenia UNIQUE

Ograniczenia UNIQUE są używane w celu wymuszenia unikatowości nonprimary kolumn klucz.W poniższym przykładzie wymusza ograniczenie, Name Kolumna Product Tabela musi być unikatowa.

Name nvarchar(100) NOT NULL
UNIQUE NONCLUSTERED

D.Przy użyciu definicji DEFAULT

Ustawienia domyślne podania wartości (z instrukcji INSERT i UPDATE) kiedy wartość nie jest dostarczany.Na przykład AdventureWorks Baza danych zawiera tabela przeszukiwania z listą różnych zadaniach wypełnić pracowników w firmie. kolumna Opis każdego zadanie domyślnego ciąg znaków może dostarczyć opis, gdy opis rzeczywista nie zostanie wprowadzona jawnie.

DEFAULT 'New Position - title not formalized yet'

Oprócz stałe definicje DEFAULT może zawierać funkcje.W poniższym przykładzie można korzystać, aby uzyskać bieżącą data wpisu.

DEFAULT (getdate())

Skanowanie funkcja zerowych może również zwiększyć integralność danych.Do przechowywania informacji o użytkowniku, który dodaje wiersz, należy użyć funkcja zerowych dla USER.Nie należy umieszczać funkcji zerowych w nawiasach.

DEFAULT USER

E.Za pomocą ograniczeń CHECK

W poniższym przykładzie pokazano ograniczenie do wartości, które są wprowadzane do CreditRating Kolumna Vendor Tabela. Ograniczenie jest bez nazwy.

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

W tym przykładzie przedstawiono ograniczenia o nazwie z ograniczeniem wzorca na znak dane wprowadzane 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 poniższym przykładzie określa, że wartości musi mieścić się w określonej listy lub postępuj zgodnie z określonym wzorcem.

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

F.Wyświetlanie definicji pełny spis

W poniższym przykładzie przedstawiono definicje pełny spis wszystkich definicji ograniczenia dla tabela PurchaseOrderDetail utworzone w AdventureWorks Baza danych. Należy zauważyć, że uruchomienie próbki, zmiany schematu tabela dbo.

G.Tworzenie tabela z kolumną danych xml wpisane do kolekcja schematu XML

Poniższy przykład tworzy tabela z xml kolumna, która zostanie wpisany do kolekcja schematu XML HRResumeSchemaCollection. The DOCUMENT keyword specifies that each wystąpienie of the xml data type in column_name can contain only one top-poziom element.

H.Tworzenie tabela partycjonowana

Poniższy przykład tworzy funkcja partycji, aby podzielić tabela lub indeks do czterech partycji.Następnie w przykładzie zostanie utworzony schemat partycji, który określa filegroups, w którym do utrzymywania każdej z czterech partycji.Na końcu przykładu tworzy tabela, która wykorzystuje schemat partycji.W tym przykładzie przyjęto założenie, filegroups 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ą przypisywane w następujący sposób.

Grupa plików

test1fg

test2fg

test3fg

test4fg

Partition

1

2

3

4

Values

kolumny 1 <= 1

Col1 > 1 AND col1 <= 100

Col1 > 100 AND col1 <= 1 000

Col1 > 1000

I.Przy użyciu typu uniqueidentifier danych kolumna

Poniższy przykład tworzy tabela z uniqueidentifier Kolumna. W przykładzie użyto ograniczenia klucz podstawowy, aby chronić tabela przeciwko użytkownikom wstawianie zduplikowanych wartości i wykorzystuje NEWSEQUENTIALID() funkcja w DEFAULT ograniczenie, aby podać wartości dla nowych wierszy. Właściwość ROWGUIDCOL jest stosowana do uniqueidentifier kolumna, tak że można się odwoływać za pomocą słowa kluczowego ROWGUID $.

J.Za pomocą wyrażenie dla kolumna obliczana

W poniższym przykładzie pokazano sposób użycia (wyrażenie)(low + high)/2) do obliczania myavg kolumna obliczana.

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

Poniższy przykład tworzy tabela z jednej kolumna zdefiniowane jako typ zdefiniowany przez użytkownika utf8string, przy założeniu, że typu wirtualny plik dziennika i typu, zostały już utworzone w bieżącej bazie danych. A second column is defined based on utf8string, and uses method ToString() of type(class)utf8string to compute a value for the column.

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

L.Za pomocą funkcja USER_NAME dla kolumna obliczana

W poniższym przykładzie użyto USER_NAME() działają w myuser_name Kolumna.

M.Tworzenie tabela z nich zawiera kolumna FILESTREAM

Poniższy przykład tworzy tabela, która ma FILESTREAM kolumna Photo. Jeśli tabela zawiera jeden lub więcej FILESTREAM kolumny, tabela musi zawierać 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()
    )

N.Tworzenie tabela, która używa kompresji wierszy

Poniższy przykład tworzy tabela, która używa kompresji wierszy.

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

Dodatkowe dane kompresji przykłady można znaleźć w temacie Creating Compressed Tables and Indexes.

O.Tworzenie tabela zawiera rozrzedzone kolumna i zestaw kolumn

W poniższych przykładach przedstawiono na sposób tworzenia tabela zawierającej kolumna rozrzedzone oraz tabela, zawiera dwie kolumna rozrzedzone, a co zestaw kolumn.W przykładach użyto składni podstawowej.Przykłady złożonych można znaleźć w temacie Using Sparse Columns i Korzystanie z zestawów kolumna.

Do utworzenia tabela, która zawiera rozrzedzone kolumna, należy wykonać poniższy kod.

CREATE TABLE T1
(c1 int PRIMARY KEY,
C2 varchar(50) SPARSE NULL ) ;

Aby utworzyć tabela, która zawiera dwie kolumna rzadkie i ustawić o nazwie CSet, wykonać następującego kodu.

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