CREATE TABLE (Transact-SQL)

Yeni bir tablooluşturur.

Konu bağlantısı simgesiTransact-SQL sözdizimi kuralları

Sözdizimi

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>

Bağımsız değişkenler

  • database_name
    tablo oluşturulan veritabanı adıdır.database_nameVarolan bir veritabanının adını belirtmeniz gerekir.Belirtilmezse, database_name Varsayılan olarak geçerli veritabanı.Geçerli bağlantı için oturum açma tarafından belirtilen veritabanında varolan bir kullanıcı kimliği ile ilişkili database_name, create table izni. o kullanıcı Kimliğiniz olmalıdır ve

  • schema_name
    Yeni tablo ait olduğu şema addır.

  • table_name
    Yeni bir tabloadıdır.Tablo adları için kuralları izleyin gerekir tanımlayıcıları.table_nameMaksimum 116 karakteri geçemez yerel geçici tablo adları (adları tek sayı işareti (#) ile öneki) haricinde 128 karakter olabilir.

  • column_name
    sütun tabloadıdır.Sütun adları için kuralları izleyin gerekir tanımlayıcıları ve tabloiçinde benzersiz olmalıdır.column_nameen çok 128 karakter uzunluğunda olabilir.column_name ile oluşturulan sütunlar için atlanmış bir timestamp veri türü.column_name Belirtilmezse, adını bir timestampsütun varsayılan değeri timestamp.

  • computed_column_expression
    Hesaplanmış bir sütundeğeri tanımlayan bir ifade olur.sütun PERSISTED işaretlenmediği sürece hesaplanmış bir sütun tablo, fiziksel olarak depolanmayan bir sanal sütun bulunur.sütun , diğer sütunları aynı tablokullanan bir ifade hesaplanır.Örneğin, hesaplanmış bir sütun tanımına sahip olabilir: cost AS price * qty.ifade , noncomputed sütun adı, sabit, işlev, değişken ve bu bağlı bir veya daha çok işleç tarafından herhangi bir birleşimi olabilir.ifade , bir alt sorgu olması veya diğer ad veri türü içeriyor.

    Hesaplanan sütunlar seçin listeleri, where yan tümceleri, order by yan tümceleri veya içinde normal ifadeler, aşağıdaki özel durumlar dışında kullanılabilecek başka yerlerde kullanılabilir:

    • Hesaplanmış bir sütun , bir varsayılan veya yabancı anahtar kısıtlaması tanımı olarak veya not null kısıtlaması tanımı kullanılamaz.Ancak, hesaplanan bir sütun dizin anahtar sütun veya tüm birincil anahtar veya benzersiz kısıtlama bir parçası olarak hesaplanmış bir sütun değeri tarafından deterministic ifade tanımlanır ve sonuç veri türü dizin sütunları izin kullanılabilir.

      tablo tamsayı sütunlar vardır, örneğin, bir ve b, hesaplanan sütun a + b dizine alınmış olabilir, ancak hesaplanan sütun a + datepart (dd, getdate()) değer içinde sonraki çağırmaları değişebilir olduğundan sıralanamıyor.

    • Hesaplanmış bir sütun , bir INSERT veya update deyim hedef olamaz.

    Not

    Her satır, bir tablo bir hesaplanan sütunkatılan sütunlar farklı değerleri olabilir; Bu nedenle, hesaplanan sütun her satır için aynı değere sahip olmayabilirsiniz.

    Kullanılan ifadelerini temel, hesaplanan sütun null atanabilirlik tarafından otomatik olarak belirlenen Veritabanı Altyapısı.Olası eksiklik ya da taşıyor da boş sonuçlarüretmek için yalnızca nonnullable sütun varsa, çoğu deyimleri sonuç null olarak kabul edilir.columnproperty işlev kullanın AllowsNull özellik herhangi null atanabilirlik araştırmak için hesaplanan sütun bir tablo.Null olabilecek ifade ile IsNull belirterek nonnullable bir tane dönüştürülebilir check_expression sabit, sabit olduğu null olmayan değer yerine bir boş sonuç.Ortak dil çalışma zamanı (clr) kullanıcı tanımlı tür ifadelerini göre hesaplanmış sütunları türüne başvurular izni gereklidir.

  • KALICI
    Belirleyen SQL Server Veritabanı Altyapısı fiziksel olarak hesaplanan değerleri ' % s'tablosu tabloiçinde saklamak ve hesaplanmış bir sütun bağımlı olduğu diğer sütunlara güncelleştirilme zamanını değerleri güncelleştirin.Hesaplanmış bir sütun PERSISTED sağlar işaretleme deterministic ancak kesin olmayan bir hesaplanan sütun üzerinde bir dizin oluşturun.Daha fazla bilgi için, bkz. Dizinler üzerinde hesaplanan sütunlar oluşturma.bölümleme sütun bölümlenmiş tablo olarak kullanılan hesaplanmış sütunlar PERSISTED açıkça işaretlenmelidir.computed_column_expressionPERSISTED belirtildiğinde belirleyici olmalıdır.

  • on { <partition_scheme> | filegroup | "default" }
    bölümleme düzeni veya tablo depolandığı dosya grubu belirtir.<Partition_scheme> belirtilmişse, tablo , bölümleri bir küme bir depolanmış olan bir bölümlenmiş tablo olduğunu ya da daha fazla filegroups belirtilen <partition_scheme>.filegroup Belirtilmişse, tablo adlandırılmış dosya grubudepolanan.dosya grubu veritabanı içinde bulunması gerekir."Varsayılan" belirtilen veya on hiç belirtilmezse, tablo üzerinde varsayılan dosya grubudepolanır.create table belirtildiği gibi bir tablo depolama mekanizması sonradan değiştirilemez.

    on {<partition_scheme> | filegroup | "varsayılan"} bir birincil anahtar veya benzersiz kısıtlama da belirtilebilir.Bu kısıtlamalar, dizinler oluşturun.filegroup Belirtilmişse, dizin adlandırılmış dosya grubudepolanan."Varsayılan" belirtilirse, ya da on hiç belirtilmemişse, dizin tabloolarak aynı dosya grubu depolanır.kümelenmiş dizin, birincil anahtar veya benzersiz kısıtlama oluşturursa, tablo için veri sayfaları dizini olarak aynı dosya grubu depolanır.clustered belirtilirse veya başka türlü kısıtlama kümelenmiş dizinoluşturur ve a <partition_scheme> , farklı belirtilen <partition_scheme> veya filegroup tablo tanımı, veya tam tersi, kısıtlama tanımı çalıştırılır ve diğer yoksayılacak.

    Not

    Bu bağlamda, varsayılan anahtar sözcük değil.Varsayılan dosya grubu için bir tanımlayıcıdır ve, gibi on sınırlanması gerekir "varsayılan" ya da on varsayılan[]."Varsayılan" belirtilmişse, QUOTED_IDENTIFIER seçeneği geçerli oturumiçin açık olması gerekir.Bu varsayılan ayardır.Daha fazla bilgi için, bkz. set QUOTED_IDENTIFIER (Transact-SQL).

    Not

    bölümlenmiş tablooluşturduktan sonra tablo için LOCK_ESCALATION seçeneği otomatik olarak ayarlama düşünün.Bu, eşzamanlılık bölümü (HoBT) düzey tabloyerine görüşmek istiyor kilitleri etkinleştirerek iyileştirebilir.Daha fazla bilgi için, bkz. ALTER TABLE (Transact-SQL).

  • TEXTIMAGE_ON { filegroup| "default" }
    Gösteren sözcükler text, ntext, image, xml, varchar(max), nvarchar(max), varbinary(max), ve CLR kullanıcı tanımlı türü sütunlar üzerinde belirtilen dosya grubudepolanan.

    tablohiçbir büyük değer sütunu varsa TEXTIMAGE_ON izin verilmez.TEXTIMAGE_ON belirtilemez, <partition_scheme> belirtilir."Varsayılan" belirtilen veya TEXTIMAGE_ON hiç belirtilmemişse, büyük değer sütun varsayılan dosya grubuiçinde depolanır.create table ' belirtilen herhangi bir büyük değere sütun veri depolanmasını sonradan değiştirilemez.

    Not

    Bu bağlamda, varsayılan anahtar sözcük değil.Varsayılan dosya grubu için bir tanımlayıcıdır ve, TEXTIMAGE_ON gibi sınırlanması gerekir "varsayılan" ya da TEXTIMAGE_ON varsayılan[]."Varsayılan" belirtilmişse, QUOTED_IDENTIFIER seçeneği geçerli oturumiçin açık olması gerekir.Bu varsayılan ayardır.Daha fazla bilgi için, bkz. set QUOTED_IDENTIFIER (Transact-SQL).

  • FILESTREAM_ON { partition_scheme_name | dosya grubu | "default" }
    FILESTREAM veri dosya grubu belirtir.

    FILESTREAM veri tablo içeriyorsa ve tablo bölümlenmiş, FILESTREAM_ON yan tümce dahil edilmelidir ve FILESTREAM filegroups bir bölümleme düzeni belirtmelisiniz.Bu bölümleme düzeni aynı bölüm işlev ve bölümleme sütunlar bölümleme düzeni olarak ' % s'tablo tabloiçin kullanmanız gerekir; Aksi halde, bir hata ortaya çıkar.

    FILESTREAM sütun bölümlenmiş tablo bölümlenmiş değil.FILESTREAM veri tablo için tek bir dosya grubudepolanması gerekir.Bu dosya grubu FILESTREAM_ON yan tümcetümcesinde belirtilir.

    tablo bölümlenmiş değil ve FILESTREAM_ON yan tümce belirtilmezse, varsayılan özellikküme olan FILESTREAM dosya grubu kullanılır. Hiçbir FILESTREAM dosya grubuise, bir hata ortaya çıkar.

    • AÇIK olduğu gibi ve TEXTIMAGE_ON, FILESTREAM_ON değiştirilemez için create table kullanarak değeri küme aşağıdaki durumlar hariç:

    • A create INDEX deyim , bir kümelenmiş dizinyığın dönüştürür.Bu durumda, bir başka FILESTREAM dosya grubu, bölümleme düzeniveya null belirtilebilir.

    • A drop INDEX deyim , bir yığın kümelenmiş dizin dönüştürür.Bu durum, farklı FILESTREAM dosya grubu, bölümleme düzeni, ya da "varsayılan" belirtilebilir.

    ' % S'filegroup dosya grubu FILESTREAM_ON, <dosya grubu>yan tümceveya bölümleme düzeniiçinde adlı her FILESTREAM dosya grubu dosya grubuiçin tanımlanan bir dosya olmalıdır. Bu dosyayı kullanarak tanımlanması gerekir bir create database veya alter database deyim; Aksi halde, bir hata ortaya çıkar.

    İlgili FILESTREAM konular için bkz: Tasarlama ve uygulama FILESTREAM depolama.

  • [ type_schema_name**.** ] type_name
    Veri türü ' % s'sütun sütunve ait olduğu şema belirtir.Veri türü aşağıdakilerden biri olabilir:

    • Sistem veri türü.

    • Bir diğer ad türü esas alan bir SQL Server Sistem veri türü.Diğer veri türleri tablo tanımında kullanılmadan önce create type deyim ile oluşturulur.create table deyimsırasında null veya not null ataması bir diğer ad veri türü için geçersiz kılınabilir.Ancak, uzunluğu belirtiminin değiştirilemez; create table deyimiçinde bir diğer ad veri türü için uzunluk belirtilemez.

    • CLR kullanıcı tanımlı türü.clr kullanıcı tanımlı türler tablo tanımında kullanılmadan önce create type deyim ile oluşturulur.CLR kullanıcı tanımlı türübir sütun oluşturmak için başvurular izni bağlı olarak gereklidir.

    type_schema_name Belirtilmezse, SQL Server Veritabanı Altyapısı başvuruları type_name aşağıdaki sırayla:

    • SQL Server Sistem veri türü.

    • Geçerli veritabanında geçerli kullanıcının varsayılan şema.

    • Dbo geçerli veritabanında şema.

  • precision
    Belirtilen veri türü duyarlık olur.Geçerli kesinlik değerleri hakkında daha fazla bilgi için bkz: duyarlık, ölçek ve uzunluk.

  • scale
    Belirtilen veri türünün ölçeği ' dir.Geçerli ölçek değerleri hakkında daha fazla bilgi için bkz: duyarlık, ölçek ve uzunluk.

  • En_Fazla
    Yalnızca için geçerlidir varchar, nvarchar, ve varbinary veri türlerini depolamak 2 ^ 31 bayt karakter ve ikili veri ve 2 ^ 30 bayt Unicode veri.

  • İÇERİK
    Belirtir her örnek , xml veri türü column_name içerebilir birden çok üst -düzey öğeleri.İÇERİĞİ yalnızca için geçerlidir xml verileri yazın ve yalnızca, belirtilen xml_schema_collection da belirtilir.Aksi takdirde belirtildiğinde, içerik varsayılan davranıştır.

  • BELGE
    Belirtir her örnek , xml veri türü column_name içerebilir tek bir üst -düzey öğe.Belge yalnızca için geçerlidir xml verileri yazın ve yalnızca, belirtilen xml_schema_collection da belirtilir.

  • xml_schema_collection
    Yalnızca için geçerlidir xml veri türü ilişkilendirme türü. bir xml şema koleksiyon içinYazmadan önce bir xml sütun için bir şema, şema önce oluşturulmalıdır kullanarak veritabanındaki xml şema KOLEKSİYONU oluşturmak.

  • VARSAYILAN
    Bir değer açıkça bir ekleme sırasında değil sağlandığında sütun için sağlanan değer belirtir.Varsayılan tanımları, tüm sütunları olarak tanımlananlar dışında uygulanabilir timestamp, ya da kimlik özellikolanlar.kullanıcı tanımlı türsütuniçin varsayılan bir değer belirtilirse, türü bir örtük dönüştürme işlemi desteklemelidir constant_expression kullanıcı tanımlı tür. tablo bırakılan varsayılan tanımları kaldırılır.Yalnızca sabit bir değer, bir karakter dizegibi; skalerişlev (bir sistem, kullanıcı tanımlı veya CLR işlevi); veya null varsayılan olarak kullanılabilir.Önceki sürümleri ile uyumluluk sağlamak için SQL Server, kısıtlama adı, varsayılan atanabilir

  • constant_expression
    Bir sabit, null veya sütuniçin varsayılan değer olarak kullanılan bir sistem işlev iş.

  • KİMLİK
    Yeni bir sütun kimlik sütunolup olmadığını gösterir.tabloyeni bir satır eklendiğinde Veritabanı Altyapısı ' % s'sütun sütuniçin bir benzersiz, artımlı değer sağlar.Kimlik sütunları tabloiçin benzersiz satır tanımlayıcısı olarak hizmet için birincil anahtar kısıtlamaları ile genellikle kullanılır.KİMLİK özellik atanabilir tinyint, smallint, int, bigint, decimal(p,0), veya numeric(p,0) sütunlar.Her tabloyalnızca bir kimlik sütun oluşturulabilir.Kimlik sütunile ilişkili varsayılanları ve varsayılan kısıtlamalar kullanılamaz.Hem çekirdek ve Artım veya her ikisi de belirtilmelidir.Hiçbiri belirtilmediyse varsayılan (1,1) ' dir.

  • seed
    İlk satır için kullanılan değer tabloyüklenir.

  • increment
    Önceki satır kimlik değerini eklenen artımlı değer yüklenir.

  • ÇOĞALTMA İÇİN DEĞİL
    create table deyim yan tümce not for REPLICATION kimliği özellik, yabancı anahtar kısıtlamaları ve Kontrol kısıtlamaları için belirtilebilir.KİMLİK özellikbu yan tümce belirtilirse, çoğaltma aracıları ekler gerçekleştirdiğinizde değerleri kimlik sütunlarının artırılır değil.İçin bir kısıtlama bu yan tümce belirtilirse, çoğaltma aracıları Ekle gerçekleştirdiğinizde kısıtlaması zorlanmaz, güncelleştirme veya silme işlemleri.Daha fazla bilgi için, bkz. Denetleme sınırlamaları, kimlikleri ve tetikleyiciler not ile çoğaltma.

  • ROWGUIDCOL
    Yeni bir sütun satır GUID sütunolduğunu gösterir.Tek bir uniqueidentifier sütun tablo başına belirlenmiş ROWGUIDCOL sütunolarak.ROWGUIDCOL özellik uygulama kullanılarak $ROWGUID sütun sağlar.ROWGUIDCOL özellik yalnızca atanabilir bir uniqueidentifier sütun.ROWGUIDCOL anahtar sözcüğü, veritabanı Uyumluluk düzey 65 ise geçerli veya daha düşük değil.Daha fazla bilgi için, bkz. sp_dbcmptlevel (Transact-SQL).Kullanıcı tanımlı veri türü sütunları ROWGUIDCOL ile belirlenen olamaz.

    ROWGUIDCOL özellik sütundepolanan değerleri benzersizliğini zorlamaz.ROWGUIDCOL de otomatik olarak tabloeklenen yeni satırlar için değerleri oluşturmaz.Her sütuniçin benzersiz değerler üretmek için aşağıdakilerden birini kullanın NEWID veya NEWSEQUENTIALID işlev Ekle ifadeleri veya bu işlevler sütuniçin varsayılan olarak kullanmak.

  • SEYREK
    sütun seyrek sütunolduğunu gösterir.Depolama seyrek sütun null değerler için optimize edilmiştir.Seyrek sütunları olamaz belirtilen not null olarak.Ek kısıtlamalar ve seyrek sütunları hakkında daha fazla bilgi için bkz: Seyrek sütunlar kullanma.

  • FILESTREAM
    Yalnızca geçerli varbinary(max) sütunlar.FILESTREAM depolama birimi belirtir varbinary(max) blob veri.

    tablo Ayrıca, bir sütun olması gerekir uniqueidentifier ROWGUIDCOL öznitelikveri türü.Bu sütun null değerlere izin vermemeli ve benzersiz veya birincil anahtar teksütun kısıtlaması olmalıdır.sütun GUID değerini, veri ekleme bir applicationwhen veya NEWID () işlevkullanan varsayılan kısıtlama olarak sağlanmalıdır.

    ROWGUIDCOL sütun bırakılan ve FILESTREAM sütun ' % s'tablo tabloiçin tanımlanmış olmakla ilgili kısıtlamalar değiştirilemez.Yalnızca son FILESTREAM sütun bırakılan sonra sütun ROWGUIDCOL bırakılabilir.

    FILESTREAM depolama öznitelik için bir sütunbelirtildiğinde, ilgili sütun için tüm değerleri FILESTREAM veri kapsayıcı dosya sisteminde depolanır.

  • HARMANLAMAcollation_name
    sütun harmanlama belirtir.Harmanlama adı, bir Windows harmanlama adı veya bir SQL harmanlama adı olabilir.collation_nameyalnızca sütun için uygulanabilir char, varchar, text, nchar, nvarchar, ve ntext veri türü.Belirtilmezse, sütun sütun kullanıcı tanımlı veri türü ise, kullanıcı tanımlı veri türü, harmanlama veya veritabanının varsayılan harmanlama atanır.

    Windows ve SQL harmanlama adları hakkında daha fazla bilgi için bkz: Windows harmanlaması adı ve SQL harmanlaması adı.

    collate yan tümcehakkında daha fazla bilgi için bkz: HARMANLAMA (Transact-SQL).

  • KISITLAMA
    BİRİNCİL anahtar, değil null, UNIQUE, FOREIGN key veya onay kısıtlaması tanımı başlangıcını belirten isteğe bağlı bir anahtar sözcüktür.Daha fazla bilgi için, bkz. Kısıtlamaları.

  • constraint_name
    Bir kısıtlamanın adıdır.Kısıtlama adlarını tablo ait olduğu şema içinde benzersiz olmalıdır.

  • NULL | NOT NULL
    sütun null değerlere izin verilip verilmediğini belirler.null kesinlikle bir sınırlama değil, ancak yalnızca gibi belirtilen not null.not null yalnızca PERSISTED de belirtilmişse hesaplanan sütunlar için belirtilebilir.

  • BİRİNCİL ANAHTAR
    Belirtilen sütun veya sütunları benzersiz diziniçin varlıkbütünlük zorlar bir sınırlamadır. Her tabloyalnızca bir birincil anahtar kısıtlaması oluşturulur.

  • BENZERSİZ
    Belirtilen sütun veya sütunları benzersiz diziniçin varlıkbütünlük sağlar bir sınırlamadır. Bir tablo , birden çok benzersiz kısıtlamaları olabilir.

  • KÜMELENMİŞ | KÜMELENMEMİŞ
    Kümelenmiş veya kümelenmemiş dizin için birincil anahtar veya benzersiz kısıtlama oluşturulduğunu gösterir.clustered için birincil anahtar kısıtlamaları varsayılan ve nonclustered için benzersiz kısıtlamaları varsayılan.

    create table deyimkümelenmiş için yalnızca bir kısıtlama olarak belirtilebilir.clustered için benzersiz kısıtlama belirtilir ve PRIMARY key kısıtlaması da belirtilen birincil anahtar nonclustered için varsayılan kullanır.

  • YABANCI ANAHTAR BAŞVURULARI
    Verileri sütun veya sütunları için başvuru bütünlük sağlayan bir sınırlamadır.YABANCI anahtar kısıtlamaları, her değeri sütun karşılık gelen başvurulan sütun veya tablobaşvurulan var gerektirir.YABANCI anahtar kısıtlamaları başvurulan tablo birincil anahtar veya UNIQUE kısıtlamaları olan sütunlar veya başvurulan tabloüzerinde benzersiz bir dizin içinde başvurulan sütunları başvuruda bulunabilir.Hesaplanan sütunlar üzerinde yabancı anahtarları da PERSISTED işaretlenmelidir.

  • [ schema_name**.**] referenced_table_name]
    YABANCI anahtar kısıtlamasını ve ait olduğu şema tarafından başvurulan tablo adıdır.

  • **(**ref_column [ ,... n ] )
    Bir sütunveya FOREIGN key kısıtlaması tarafından başvurulan tablo sütunlar listesinde değil.

  • SİLME sırasında { Eylem | ART ARDA SIRALI | SET NULL | VARSAYILAN} KÜMESİ
    Bilgi tutarlılığına ilişki satırları varsa ve üst tablobaşvurulan satır silinir oluşturulan tablo satır eylem olacağını belirtir.Eylem yok varsayılandır.

    • EYLEM YOK
      Veritabanı Altyapısı Raises hata ve üst tablo satır silme eylem toplu geri.

    • ART ARDA SIRALI
      Üst tablosatır silinirse başvuru tablo karşılık gelen satırlar silinir.

    • NULL AYARLAMA
      Ana tablo karşılık gelen satır silinirse, yabancı anahtar oluşturan tüm küme null değerlerdir.yürütmekbu sınırlama yabancı anahtar sütunları null olmalıdır.

    • VARSAYILAN YAPMA
      Ana tablo karşılık gelen satır silinirse, yabancı anahtar oluşturan tüm varsayılan değerlerine küme değerlerdir.yürütmekiçin bu sınırlama, tüm yabancı anahtar sütunlarının varsayılan tanımlamaları olmalıdır.sütun Null olabilecek ve yok yok açık varsayılan değeri küme, örtülü, varsayılan değeri sütunnull olur.

    tablo kullanan mantıksal kayıtları birleştirme yayın dahil edilecek, cascade belirtmeyin.Mantıksal kayıtları hakkında daha fazla bilgi için bkz: Değişiklikleri'mantıksal kayıtları ile ilgili satırları gruplandırma.

    delete cascade üzerinde bir INSTEAD of tetikleyici on delete tablozaten varsa, tanımlanamaz.

    Örneğin, AdventureWorks2008R2 veritabanı, ProductVendor tablo Satıcı tablo.ProductVendor.BusinessEntityID yabancı anahtar başvuruları Vendor.BusinessEntityID birincil anahtar.

    delete deyim içinde bir satırda yürütülür, Satıcı tablove on delete cascade eylem için belirlenen ProductVendor.BusinessEntityID, Veritabanı Altyapısı bir veya daha fazla bağımlı satır için denetimlerini ProductVendor tablo.Herhangi varsa, bağımlı olarak satırları ProductVendor tablo silinir ve satırın ayrıca başvuru Satıcı tablo.

    Buna karşılık, Hayır eylem belirttiyseniz, Veritabanı Altyapısı hata yükseltir ve silme eylem geri alır Satıcı en az bir satırda ise satır ProductVendorbaşvurduğutablo .

  • Update { Eylem | ART ARDA SIRALI | SET NULL | VARSAYILAN} KÜMESİ
    Bilgi tutarlılığına ilişki satırları olan ve bulunulan satırın üst tablogüncelleştirilir, değiştirilen tablo satır eylem olacağını belirtir.Eylem yok varsayılandır.

    • EYLEM YOK
      Veritabanı Altyapısı Hata, raises ve üst tablo satır güncelleştirme eylem toplu geri.

    • ART ARDA SIRALI
      Üst tablosatır güncelleştirildiğinde başvuru tablo karşılık gelen satırlar güncelleştirilir.

    • NULL AYARLAMA
      Ana tablo karşılık gelen satır güncelleştirildiğinde yabancı anahtar oluşturan tüm küme null değerlerdir.yürütmekbu sınırlama yabancı anahtar sütunları null olmalıdır.

    • VARSAYILAN YAPMA
      Ana tablo karşılık gelen satır güncelleştirildiğinde yabancı anahtar oluşturan tüm varsayılan değerlerine küme değerlerdir.yürütmekiçin bu sınırlama, tüm yabancı anahtar sütunlarının varsayılan tanımlamaları olmalıdır.sütun Null olabilecek ve yok yok açık varsayılan değeri küme, örtülü, varsayılan değeri sütunnull olur.

    tablo kullanan mantıksal kayıtları birleştirme yayın dahil edilecek, cascade belirtmeyin.Mantıksal kayıtları hakkında daha fazla bilgi için bkz: Değişiklikleri'mantıksal kayıtları ile ilgili satırları gruplandırma.

    INSTEAD of tetikleyici on update değiştirilmiş tablo zaten varsa, üzerinde update cascade tanımlanamaz.

    Örneğin, AdventureWorks2008R2 veritabanı, ProductVendor tablo Satıcı tablo: ProductVendor.BusinessEntity yabancı anahtar başvuruları Vendor.BusinessEntityID birincil anahtar.

    Bir satırda bulunan bir update deyim yürütüldü, Satıcı tablove bir on update cascade eylem için belirlenen ProductVendor.BusinessEntityID, Veritabanı Altyapısı bir veya daha fazla bağımlı satır için denetimlerini ProductVendor tablo.Herhangi varsa, bağımlı olarak satırları ProductVendor tablo güncelleştirilir ve satırın ayrıca başvuru Satıcı tablo.

    Buna karşılık, Hayır eylem belirttiyseniz, Veritabanı Altyapısı hata yükseltir ve Güncelleştir eylem geri alır Satıcı en az bir satırda ise satır ProductVendorbaşvurduğutablo .

  • ONAY
    Bir sütun veya sütunlara girilebilecek olası değerler sınırlayarak etki alanıbütünlük zorlar bir sınırlamadır. Hesaplanan sütunlar üzerinde kısıtlamalar PERSISTED işaretlenmelidir DENETLEYİN.

  • logical_expression
    true veya false döndüren mantıksal bir ifade olur.Diğer veri türlerini ifadeparçası olamaz.

  • column
    Bir sütun veya tablo kısıtlamalarını kısıtlama tanımı içinde kullanılan sütunları belirtmek üzere kullanılan parantez içinde sütunlar listesinde değil.

  • [ ASC | DESC]
    sütun veya tablo kısıtlamaları içinde katılan sütunlar nasıl sıralanacağı belirtir.asc varsayılandır.

  • partition_scheme_name
    bölümlenmiş tablo bölümleri eşlenmiş olması dosya gruplarını tanımlar bölümleme düzeni adıdır.bölümleme düzeni , veritabanı içinde bulunması gerekir.

  • [ partition_column_name**.** ]
    Karşı bölümlenmiş tablo bölümlenmiş sütun belirtir.' % S'sütun sütun bölüm işlev belirtilen eşleşmesi gerekir, 'ıpartition_scheme_name kullanarak veri türü, uzunluğu ve duyarlılık.Yer aldığı bir bölüm işlev hesaplanmış bir sütun PERSISTED açıkça işaretlenmelidir.

    Önemli notÖnemli

    Bölümlenmiş tablolar ve ayrıca kaynakları nonpartitioned tablo bölümleme sütun ya da alter table hedefleri değil null belirtmek öneririz...GEÇİŞ işlemleri.Bunu yapmak için null değerleri denetlemek bölümleme sütunlar üzerinde hiçbir Kontrol kısıtlamaları olmadığından emin yapar.Daha fazla bilgi için, bkz. Bölüm Geçişi kullanarak verimli veri aktarma.

  • FILLFACTOR ile **=**fillfactor
    Nasıl tam belirtir Veritabanı Altyapısı her dizin sayfası saklanacağı kullanılan yapmakdizini veri.Kullanıcı tarafından belirtilen fillfactor değerleri 1 ile 100 arasında olabilir.Bir değer belirtilmezse, varsayılan değer 0'dır.Dolgu faktörü 0 ve 100 tüm açılardan aynı değerlerdir.

    Önemli notÖnemli

    Documenting ile FILLFACTOR = fillfactor , geçerli birincil anahtar veya UNIQUE kısıtlamaları yalnızca dizin seçeneği olarak saklanır, geriye doğru uyumluluk için ancak belgelenmemiştir bu şekilde gelecekteki sürümleri.

  • column_set_nameXML COLUMN_SET FOR ALL_SPARSE_COLUMNS
    sütunkümeadıdır. Bir sütun küme tüm seyrek sütunları bir tablo yapısal çıktı akımına bir araya getiren bir untyped xml temsilidir.sütun kümeleri hakkında daha fazla bilgi için bkz: Sütun kümelerini kullanma.

  • <table_option> :: =
    Bir veya daha fazla tablo seçenekleri belirtir.

  • DATA_COMPRESSION
    Belirtilen tablo, bölüm numarası veya aralık bölümleri için veri sıkıştırma seçeneği belirtir.Seçenekler aşağıdaki gibidir:

    • HİÇBİRİ
      Tablo veya belirtilen bölümleri sıkıştırılmaz.

    • SATIR
      Tablo veya belirtilen bölümleri satır sıkıştırması kullanılarak sıkıştırılır.

    • SAYFA
      Tablo veya belirtilen bölümleri sayfa sıkıştırması kullanılarak sıkıştırılır.

    Sıkıştırma hakkında daha fazla bilgi için bkz: Sıkıştırılmış tablolar ve dizinler oluşturma.

  • BÖLÜMLERİNDE () { <partition_number_expression> | <aralık>} ,... n )
    DATA_COMPRESSION ayar uygulanacağı bölümlerini belirtir.tablo bölümlenmiş değil on bölüm bağımsız bir hata oluşturur.on bölüm yan tümce sağlanmazsa, DATA_COMPRESSION seçeneği bölümlenmiş tablotüm bölümleri için geçerli olacaktır.

    <partition_number_expression> aşağıdaki şekillerde belirtilebilir:

    • Bir bölümün bölüm numarasını örneğin sağlar: DİSK (2).

    • Örneğin virgülle ayırarak birkaç tek tek bölümleri için bölüm numaraları sağlar: BÖLÜMLERİNDE (1, 5).

    • Örneğin aralıkları ve tek tek bölümleri sağlar: BÖLÜMLERİNDE (2, 4, 6-8)

    <aralık> örneğin word için ayrılmış bölüm numaraları olarak belirtilebilir: BÖLÜMLERİNDE (6-8).

    küme farklı türleri farklı bölümleri için veri sıkıştırması için DATA_COMPRESSION seçeneği birden fazla kez örneğin belirtin:

    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> :: =
    Bir veya daha fazla dizin seçeneklerini belirtir.Bu seçeneklerin tam açıklaması için bkz: CREATE INDEX (Transact-SQL).

  • PAD_INDEX = {ON | OFF }
    on, yüzdesini serbest tarafından belirtilen alan FILLFACTOR dizin Orta düzey sayfalar için uygulanır.Kapalı veya FILLFACTOR bir değer olduğunda, belirtilmemiş Orta düzey sayfalar küme , ara sayfalarında anahtarları düşünmeden dizini olabilir, en büyük boyutu en az bir satır için yeterli boşluk bırakarak kapasite yakınında doldurulmuş durumdadır.Varsayılan kapalı'dır.

  • FILLFACTOR **=**fillfactor
    Nasıl tam olarak gösteren bir yüzdesini belirtir Veritabanı Altyapısı her dizin sayfası sırasında dizin oluşturma veya yaprakdüzey yapmak yayımlanmasından.fillfactor1-100 bir tamsayı değeri olmalıdır.Varsayılan değer 0'dir.Dolgu faktörü 0 ve 100 tüm açılardan aynı değerlerdir.

  • IGNORE_DUP_KEY = {ON | OFF }
    Yinelenen anahtar değerleri bir benzersiz dizineklemek INSERT işlemi çalıştığında hata yanıtını belirtir.Dizin oluşturulduğunda veya yeniden sonra işlemleri yalnızca eklemek için IGNORE_DUP_KEY seçeneğini uygular.Seçenek yürütürken etkisi create INDEX, alter INDEX, veya güncelleştirme.Varsayılan kapalı'dır.

    • ON
      Yinelenen anahtar değerleri benzersiz dizineklendiğinde uyarı iletisi oluşacaktır.Yalnızca benzersiz kısıtlamayı ihlal satırları başarısız olur.

    • KAPALI
      Hata iletisi, bir benzersiz dizinyinelenen anahtar değerleri eklendiğinde ortaya çıkar.Tüm ekleme işlemini geri alınır.

    IGNORE_DUP_KEY küme on bir görünüm oluşturulmuş dizinleri, benzersiz olmayan dizinler, xml dizinler, kayma dizinleri ve filtre uygulanmış dizinler olamaz.

    IGNORE_DUP_KEY görüntülemek için sys.indexes.

    Geriye dönük uyumlu sözdiziminde ile IGNORE_DUP_KEY IGNORE_DUP_KEY ile için eşdeğerdir = on.

  • STATISTICS_NORECOMPUTE = {on | OFF }
    ÜZERİNDE ne zaman, dışarı-in-tarih dizin istatistikleri değil otomatik olarak recomputed.Kapalı, otomatik istatistik güncelleştirme etkinleştirildiğinde.Varsayılan kapalı'dır.

  • ALLOW_ROW_LOCKS = { ON | OFF}
    Dizine erişirken olduğunda, satır kilitleri izin verilir.Veritabanı Altyapısı Satır kilitleri ne zaman kullanılacağını belirler.Ne zaman kapalı, satır kilitleri kullanılmaz.Varsayılan açık'tır.

  • allow_page_locks = { on | OFF}
    Dizine erişirken zaman, sayfa kilitlemeleri izin verilir.Veritabanı Altyapısı sayfa kilitlemeleri ne zaman kullanılacağını belirler.Ne zaman kapalı, sayfa kilitlemeleri kullanılmaz.Varsayılan açık'tır.

Açıklamalar

SQL Server 2008Veritabanı başına en çok 2 milyar tablolar bulunabilir. Bir tanımlı sütunkümeiçeren bir tablo , en fazla 1024 seyrek + hesaplanmış sütun içeren en fazla 30.000 sütunlar olabilir. sütun kümelerini olmayan tablolar için 1024 sütunlar sınırlıdır. Satır sayısı ve toplam boyutunu tablo yalnızca kullanılabilir depolama ile sınırlıdır.En fazla bayt satır başına 8,060 sayısıdır.Bu kısıtlama tablolar için rahat varchar, nvarchar, varbinary, veya sql_variant sütunları neden olan toplam tanımlanan tablo genişliği aşan 8,060 bayt.Her biri bu sütun uzunlukları yine 8.000 bayt sınırında kalan gerekir, ancak birleşik genişliklerini tablo8,060 bayt sınırını aşıyor olabilir.Daha fazla bilgi için, bkz. 8 kb aşan satır taşma veri.

Her tablo , en fazla 999 kümelenmemiş dizinleri ve 1 kümelenmiş diziniçerebilir.Bu tabloiçin tanımlanmış birincil anahtar ve benzersiz kısıtlamaları desteklemek için oluşturulan dizinler içerir.

Alanı genellikle tablolar ve dizinler bir kapsam saatartırımları ile ayrılır.tablo ya da dizin oluşturulduğunda, Tekdüzen kapsamdoldurmak için yeterli sayıda sayfa olduğu kadar da karışık uzantılarına sayfaları tahsis edilir.Tekdüzen kapsamdoldurmak için yeterli sayfaları vardır sonra başka bir kapsam her saat tahsis edilir şu anda ayrılmış kapsamlarını tam olur.İçin ayrılan ve bir tablo yürütmekkullanılan alan miktarını hakkında bir raporbilgilerini sp_spaceused.

Veritabanı Altyapısı Değil zorla sipariş, varsayılan, kimlik, ROWGUIDCOL veya sütun kısıtlamaları belirtilmiş bir sütun tanımı.

Bir tablo oluşturduğunuzda, tablo oluşturulduğunda seçeneği off için küme olsa bile, tırnak içine alınmış TANIMLAYICI seçeneği her zaman on tablo meta veriler depolanır.

Geçici tablolar

Yerel ve genel geçici tablolar oluşturabilirsiniz.Yalnızca geçerli oturumsırasında yerel geçici tablolar görülebilir ve genel geçici tablolar için tüm oturumlara görülebilir.Geçici tablo bölümlenmiş olamaz.

Yerel geçici tablo adları tek sayı işareti ile önek (#table_name) ve genel geçici tablo adları çift sayı işareti ile önek (##table_name).

SQL deyimleri için belirtilen değeri kullanarak geçici bir tablo başvurusu table_name create table deyim, örneğin:

CREATE TABLE #MyTempTable (cola INT PRIMARY KEY);

INSERT INTO #MyTempTable VALUES (1);

Birden fazla geçici tablo bir tek saklı yordam veya toplu işiçinde oluşturduysanız, bunlar farklı adlara sahip olmalıdır.

saklı yordam veya birden çok kullanıcının aynı saat yapılabilecek uygulama yerel geçici tablo oluşturduysanız, Veritabanı Altyapısı oluşturduğu tablolar ayırt etmek için olmalıdırfarklı kullanıcıların.Veritabanı Altyapısı Tarafından dahili olarak, her yerel geçici tablo adı. sayısal bir sonek ekleme yaparGeçici tablo olarak saklanan tam adı sysobjects tablo tempdb create table deyim ve sistem tarafından oluşturulan sayısal sonek belirtilen tablo adı oluşur. Sonek, izin vermek için table_name belirtilen için yerel geçici bir ad en çok 116 karakter.

kapsamdışında olduğunuzda geçici tablolar açıkça drop table kullanarak bırakılan sürece otomatik olarak kesilir:

  • saklı yordam tamamlandığında, bir saklı yordam oluşturulan yerel geçici tablo otomatik olarak çıkarılır.tablo , tablooluşturan saklı yordam tarafından yürütülen tüm iç içe saklı yordamlar tarafından başvurulabilir.tablo tablooluşturulan saklı yordam çağıran işlem tarafından başvurulamaz.

  • Diğer tüm yerel geçici tablolar otomatik olarak geçerli oturumsonunda bırakılır.

  • Genel geçici tablolar tablo oluşturulan oturum sona erdiğinde otomatik olarak kesilir ve tüm diğer görevleri onlara başvuran durdurdunuz.Yalnızca tek bir yaşam için bir görev bir tablo arasındaki ilişkiyi tutulur Transact-SQL deyim.Genel geçici tablo son bitiminde düşer yani Transact-SQLoluşturma oturum sona erdi, tablo etkin olarak başvuruda bulunuyordeyim .

saklı yordam veya tetikleyiciyi içinde oluşturulan yerel geçici tablo ' % s'yordamı saklı yordam önce oluşturulan geçici bir tablo adıyla aynı olabilir veya tetikleyici olarak bilinir.Ancak, geçici bir tablo sorgu başvuran ve o saataynı ada sahip iki geçici tablolar var, onu hangi tablo sorgu karşı çözülmüştür tanımlı değil.İç içe geçmiş bir saklı yordamlar, sayfayı çağıran saklı yordam tarafından oluşturulan geçici tablo olarak aynı adı taşıyan geçici tablolara da oluşturabilirsiniz.Ancak, iç içe yordamla oluşturulan tablo gidermek değişiklikler için aynı yapıyla aynı sütun adları, arama yordamda oluşturduğunuz tablo tablo olmalıdır.Bu, aşağıdaki örnekte gösterilmiştir.

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

Sonuç kümesi buradadır.

(1 row(s) affected)

Test1Col

-----------

1

(1 row(s) affected)

Test2Col

-----------

2

Yerel veya genel geçici tablolar oluşturduğunuzda, yabancı anahtar kısıtlamaları haricinde kýsýtlama tanýmlarý create table sözdizimi destekler.Geçici tabloyabancı anahtar kısıtlamasını belirtilirse, deyim kısıtlaması bildiren bir uyarı iletisi geçildi döndürür.tablo FOREIGN key kısıtlamaları yine de oluşturulur.YABANCI anahtar kısıtlamalarını geçici tabloları başvurulamaz.

Geçici tablolar yerine tablo değişkenlerini kullanmanızı öneririz.Geçici tablolara, dizinler açıkça üzerinde oluşturulmalıdır veya tablo değerleri, saklı yordamları ve işlevleri arasında görünür olmalıdır yararlıdır.Genellikle, tablo değişkenlerini daha etkili bir sorgu işleme katkıda bulunurlar.Daha fazla bilgi için, bkz. Tablo (Transact-SQL).

Bölümlenmiş tablolar

create table kullanarak bölümlenmiş tablo oluşturmadan önce tablo bölümlenmiş nasıl olur belirtmek için bir bölüm işlev önce oluşturmanız gerekir.Bölüm işlev kullanılarak oluşturulan Bölüm işlevi oluşturmak.İkinci olarak, bölüm işlevtarafından belirtilen bölümler tutacaktır filegroups belirtmek için bir bölümleme düzeni oluşturmanız gerekir.bölümleme düzeni kullanılarak oluşturulan Bölüm düzeni oluşturmak.Yerleştirme dosya gruplarını ayırmak için birincil anahtar veya UNIQUE kısıtlamaları bölümlenmi tabloları için belirtilemez.Daha fazla bilgi için, bkz. Bölümlenmiş tablolar ve dizinler.

BİRİNCİL anahtar sınırlamaları

  • Bir tablo yalnızca bir birincil anahtar kısıtlaması içerebilir.

  • PRIMARY key kısıtlaması tarafından oluşturulan dizin dizin sayısı 999 kümelenmemiş dizinleri ve 1 kümelenmiş dizin tablo üzerinde neden olamaz.

  • clustered veya nonclustered için birincil anahtar kısıtlaması belirtilmemişse, benzersiz kısıtlamaları için belirtilen kümelenmiş dizin varsa, clustered kullanılır.

  • PRIMARY key kısıtlaması içinde tanımlanmış tüm sütunlar tanımlanmalıdır not null olarak.null atanabilirlik belirtilmezse, tüm sütunların birincil anahtar sınırlaması bulunan katılan kendi null atanabilirlikküme değil sahip boş.

  • Birincil anahtar bir CLR kullanıcı tanımlı türü sütuntanımlanmışsa, ikili sıralama türü uygulamasıdır desteklemelidir.Daha fazla bilgi için, bkz. clr kullanıcı tanımlı türler.

UNIQUE Kısıtları

  • nonclustered, clustered veya nonclustered için benzersiz kısıtlama belirtilmezse, varsayılan olarak kullanılır.

  • Her benzersiz kısıtlama bir dizin oluşturur.BENZERSİZ kısıtlama sayısını dizinlerinin sayısı 999 kümelenmemiş dizinleri ve 1 kümelenmiş dizin tablo üzerinde neden olamaz.

  • Benzersiz kısıtlama bir CLR kullanıcı tanımlı türü sütuntanımlanmışsa, ikili veya işleçtürü uygulamasıdır desteklemelidir-sipariş alarak.Daha fazla bilgi için, bkz. clr kullanıcı tanımlı türler.

YABANCI anahtar sınırlamaları

  • sütun yabancı anahtar kısıtlamasını, null dışında bir değer girildiğinde, başvurulan sütundeğeri bulunmalıdır; Aksi takdirde, yabancı anahtar ihlali hata iletisi döndürülür.

  • kaynak sütun belirtilmedikçe FOREIGN key kısıtlamaları önceki sütunuygulanır.

  • FOREIGN key kısıtlamaları yalnızca aynı sunucuda aynı veritabanındaki tablolara başvuruda bulunabilir.Veritabanları arası bilgi bütünlük Tetikleyiciler uygulanmalıdır.Daha fazla bilgi için, bkz. CREATE TRIGGER (Transact-SQL).

  • YABANCI anahtar kısıtlamaları, aynı tablobaşka bir sütun başvuruda bulunabilir.Bu bir başvurusu adlandırılır.

  • Bir sütun- yan tümce başvuruları tek bir başvuru sütundüzey yabancı anahtar kısıtlamasını listeleyebilirsiniz.Bu sütun , aynı veri türü kısıtlaması tanımlı sütun olarak olması gerekir.

  • tablo- yan tümce başvurularıdüzey yabancı anahtar kısıtlamasını sütun sayısı aynı sayıda başvuru sütun kısıtlaması sütun listesinden olmalıdır.Her başvuru sütun veri türünü de karşılık gelen sütun sütun listesi ile aynı olmalıdır.

  • cascade, set null veya varsayılan YAP belirtilemez sütun türü, timestamp yabancı anahtar veya başvurulan anahtarparçasıdır.

  • cascade, set null, set default ve eylem yok birbirleriyle ilişkileri bilgi tutarlılığına sahip tablolar birleştirilebilir.Veritabanı Altyapısı no ACTION karşılaştığında onu durdurur ve alır geri ilgili cascade, set null ve set default eylemler.cascade, set null, varsayılan olarak ayarla ve eylem yok eylemler, BASAMAKLA birlikte delete deyim neden olduğunda set null ve set default eylemleri önce uygulanan Veritabanı Altyapısı denetler hiçbir Hayır eylem.

  • Veritabanı Altyapısı Önceden tanımlı bir tablo içerebilir ve diğer tablolara başvuran yabancı anahtar kısıtlamaları sayısı veya belirli bir tablobaşvuran tablolar tarafından sahip olunan yabancı anahtar kısıtlamaları sayısı sınırı yok.

    Yine de, veritabanının ve uygulamanın tasarımına ve donanım yapılandırma tarafından kullanılabilecek yabancı anahtar kısıtlamaları gerçek sayısı sınırlıdır.Bir tablo en çok 253 yabancı anahtar kısıtlamaları içeren ve en çok 253 yabancı anahtar kısıtlamaları tarafından başvurulması önerilir.Size etkili sınırı, daha fazla veya az, uygulama ve donanım bağlı olabilir.Veritabanı ve uygulama tasarladığınızda, yabancı anahtar kısıtlamaları zorlamayı maliyetini göz önünde bulundurun.

  • FOREIGN key kısıtlamaları üzerinde geçici tablolara zorlanmaz.

  • YABANCI anahtar kısıtlamaları yalnızca birincil anahtar veya UNIQUE kısıtlamaları başvurulan tablo veya benzersiz dizin başvurulan tablosütunlara başvurabilir.

  • yabancı anahtar bir CLR kullanıcı tanımlı türüsütuntanımlanmışsa, ikili sıralama türü uygulamasıdır desteklemelidir. Daha fazla bilgi için, bkz. clr kullanıcı tanımlı türler.

  • sütun türü varchar(max) bir yabancı anahtar kısıtlaması yalnızca yoksa birincil anahtar başvurduğu türü olarak tanımlanan de katılmak varchar(max).

Varsayılan tanımları

  • sütun yalnızca bir varsayılan tanım olabilir.

  • Varsayılan tanımını içeren sabit değerleri, İşlevler, SQL-92 giriş parametresiz işlevlerveya null.Aşağıdaki tablo , giriş parametresiz işlevler ve INSERT deyimsırasında döndürmeleri için varsayılan değerleri gösterir.

    SQL-92 parametresiz işlev

    Döndürülen değer

    CURRENT_TIMESTAMP

    Geçerli tarih ve saat.

    ÖRNEİN

    INSERT gerçekleştiren kullanıcının adı.

    SESSION_USER'I

    INSERT gerçekleştiren kullanıcının adı.

    SYSTEM_USER

    INSERT gerçekleştiren kullanıcının adı.

    KULLANICI

    INSERT gerçekleştiren kullanıcının adı.

  • constant_expressionVarsayılan tanımını başka bir sütun tabloveya diğer tablolar, görünümler, başvuramaz veya saklı yordamları.

  • Varsayılan tanımları sahip sütunları oluşturulamıyor bir timestamp veri türü veya kimlik özelliksütunlarla.

  • diğer ad veri türü için varsayılan nesne bağlı varsayılan tanımları, diğer ad veri türlerini içeren sütunlar için oluşturulamaz.

DENETLEME kısıtlamaları

  • Bir sütun herhangi bir sayıda denetim kısıtlamaları olabilir ve koşul birlikte birden çok mantıksal ifadeler içerebilir ve ve veya.Bir sütun için birden çok denetim kısıtlamalarını oluşturuldukları sıraya göre doğrulanır.

  • arama koşulu Booleifade oluşturmalı ve başka bir tablobaşvuru yapamazsınız.

  • Bir sütun-düzey denetim kısıtlaması yalnızca kısıtlanmış sütunve tablobaşvurusu -düzey denetim kısıtlaması yalnızca aynı tablosütunları başvuruda bulunabilir.

    DENETLEME KISITLAMALARI ve kuralları Ekle ve güncelleştir deyimleri sırasında verileri doğrulama aynı işlev hizmet.

  • Bir sütun veya sütunları için bir kural ve bir veya daha fazla denetim kısıtlamaları var, tüm kısıtlamalar değerlendirilir.

  • Kontrol kısıtlamaları üzerinde tanımlanamaz text, ntext, veya image sütunlar.

Ek kısıtlama bilgi

  • drop INDEX kullanarak bir kısıtlama için oluşturulan dizin bırakılan olamaz; CONSTRAINT alter table kullanarak bırakılan gerekir.İçin oluşturulan ve kullanılan bir sınırlama dizin alter INDEX kullanarak yeniden oluşturulması.

  • Kısıtlama adları için kuralları izleyin gerekir tanımlayıcıları, adı bir sayı işareti (#) ile başlatılamıyor olmasıdır.constraint_name Olan sağlanmayan, sistem tarafından oluşturulan bir ad kısıtlaması. için atanmışKısıtlama adı bir kısıtlama ihlali ile ilgili herhangi bir hata iletisi görüntülenir.

  • Kısıtlamayı ihlal bir INSERT update veya delete deyim, deyim sonlanır.set xact_abort küme off olduğunda, deyim belirtik işlem, bir parçasıysa, ancak hareket işlenmesine devam eder.set xact_abort küme on olduğunda, tüm işlem geri alınır.Kontrol ederek hareket tanımı ile rollback İŞLEMİNİ deyim kullanabilirsiniz **@**hata sistem işlev.

  • Zaman allow_row_locks = on ve allow_page_lock = on, satır, sayfa-, ve tablo-düzey kilitleri verilir dizin erişirken.Veritabanı Altyapısı Uygun kilit seçer ve kilit bir satır ya da sayfakilit gelen tablokilityükseltebileceği. Daha fazla bilgi için, bkz. Kilit yükseltme (veritabanı altyapısı).Zaman allow_row_locks = off ve allow_page_lock = off, yalnızca bir tablo- dizin erişimdüzey kilit verilir.Dizin kilitleme taneciklik yapılandırma hakkında daha fazla bilgi için bkz: Bir dizini için kilitleme özelleştirme.

  • Bir tablo yabancı anahtar veya Denetim KISITLAMALARI ve tetikleyiciler varsa, tetikleyici yürütülmeden önce kısıtlaması koşullar değerlendirilir.

Bir tablo ve sütunlarını bir rapor için kullandığınız sp_help veya sp_helpconstraint.Bir tabloyeniden adlandırmak için kullanın sp_rename.İçin bir rapor görünümleri ve tabloüzerinde bağımlı saklı yordamları kullanmak sys.dm_sql_referenced_entities ve sys.dm_sql_referencing_entities.

Tablo tanımı içinde verilebilirliğini kuralları

sütun veri sütunolarak null değer (null) izin verip bir sütun null atanabilirlik belirler.null sıfır veya boş değil: null anlamına gelir giriş yapıldığı açık bir null sağlanmadı veya genellikle değer bilinmiyor veya geçerli değil olduğunu belirtir.

tablodeğiştirme veya oluşturmak için create table veya alter TABLE'ı kullandığınızda, veritabanı ve oturum ayarlarını etkileyen ve büyük olasılıkla veri türünde bir sütun tanımında kullanılan null atanabilirlik geçersiz kılar.Her zaman açıkça bir sütun null tanımlamak veya not null noncomputed sütunlar için önerilir veya bir kullanıcı tanımlı veri türü kullanıyorsanız, sütun veri türü varsayılan null atanabilirlik kullanmak izin.Seyrek sütunlar null her zaman izin vermesi gerekir.

sütunnull atanabilirlik açıkça belirtilmemişse, sütunnull atanabilirlik aşağıdaki tablogösterildiği kurallarına uyar.

Sütun veri türü

Kural

Diğer ad veri türü

Veritabanı Altyapısı Veri türü oluşturulduğunda belirttiğiniz null atanabilirlik kullanır.Veri türünün varsayılan null atanabilirlik belirlemek için sp_help.

CLR kullanıcı tanımlı türü

Verilebilirliğini sütun tanımına göre belirlenir.

Sistem tarafından sağlanan veri türü

Sistem tarafından sağlanan veri türü yalnızca bir seçenek varsa, öncelik kazanır.timestampveri türleri olmalıdır not null.

Ne zaman oturum ayarları küme üzerinde KÜMESİNİ kullanarak şunlardır:

  • ANSI_NULL_DFLT_OFF = on, null atanır.

  • ANSI_NULL_DFLT_OFF = on, değil null atanır.

  • Ne zaman herhangi bir veritabanı ayarlarını alter database kullanarak yapılandırılır:

  • ANSI_NULL_DEFAULT_ON = on, null atanır.

  • ANSI_NULL_DEFAULT_OFF = on, değil null atanır.

  • ANSI_NULL_DFLT_ON veritabanı ayarını görüntülemek için sys.databases Katalog görünümü

Ne zaman ne ANSI_NULL_DFLT, seçenekleri küme oturum ve veritabanı küme default (ANSI_NULL_DEFAULTis off), not varsayılan null atanır.

' % S'sütun sütun hesaplanan sütunise, null atanabilirlik , otomatik olarak her zaman belirlenir Veritabanı Altyapısı.null atanabilirlik sütunbu tür bulmak için columnproperty işlev kullanın AllowsNullözellik.

Not

Her ikisi de ANSI_NULL_DFLT_OFF küme açık olması için varsayılan SQL Server için Microsoft ole DB sağlayıcısı ve SQL Server odbc sürücüsü.odbc ve ole DB kullanıcıları bu odbc veri kaynaklarında veya bağlantı özniteliklerini veya özelliklerini küme ile uygulama tarafından yapılandırabilirsiniz.

Veri sıkıştırma

Sistem tabloları için sıkıştırma etkin duruma getirilemez.tablooluştururken, veri sıkıştırmasını küme yok, aksi belirtilmedikçe kümesidir.Bölüm veya aralıkdışı bir bölüm listesini belirtirseniz, bir hata oluşturulur.Veri sıkıştırma hakkında daha fazla bilgi için bkz: Sıkıştırılmış tablolar ve dizinler oluşturma.

Nasıl sıkıştırılma durumunu değiştirme bir tablo, dizin veya bölüm etkileyeceğini değerlendirmek için kullanın sp_estimate_data_compression_savings saklı yordam.

İzinler

create table izni veritabanında ve tablo oluşturulacağı şema üzerinde alter izni gerektirir.

create table deyim sütun CLR kullanıcı tanımlı türüolarak tanımlanır, sahiplik türü ya da onu başvurular izni gereklidir.

Tüm sütunları create table deyim içinde kendileri ile ilişkilendirilmiş bir xml şema koleksiyon varsa, xml şema koleksiyon sahipliğini ya da onu başvurular izni gereklidir.

Örnekler

A.BİRİNCİL anahtar kısıtlamalarını kullanmak

Aşağıdaki örnek kümelenmiş dizin PRIMARY key kısıtlaması sütun tanımı gösterir BusinessEntityIDsütun Employee(kısıtlama adı sağlamak sistem izin verme)tablo içinde AdventureWorks2008R2 örnek veritabanı.

BusinessEntityID int
PRIMARY KEY CLUSTERED

B.YABANCI anahtar kısıtlamalarını kullanmak

YABANCI anahtar kısıtlamasını, başka bir tablobaşvurmak için kullanılır.Yabancı anahtarlar, teksütun tuşları veya birden çok sütun tuşları olabilir.Bir teksütun yabancı anahtar kısıtlamasını gösterir bu aşağıdaki örnek SalesOrderHeaderbaşvurantablo SalesPersontablo. Bir teksütun için yabancı anahtar kısıtlaması yalnızca başvuru yan tümce gereklidir.

SalesPersonID int NULL
REFERENCES SalesPerson(BusinessEntityID)

Ayrıca açıkça yabancı anahtar yan tümce ve sütun öznitelikyazmayı kullanabilirsiniz.Not sütun adı, her iki tablodaki aynı olacak şekilde yok.

FOREIGN KEY (SalesPersonID) REFERENCES SalesPerson(BusinessEntityID)

Birden çok sütun anahtar kısıtlamaları tablo kısıtlamaları olarak oluşturulur.De AdventureWorks2008R2 veritabanı, SpecialOfferProduct tablo içeren bir sütunlu birincil anahtarı.Aşağıdaki örnek, nasıl bu anahtar başka bir tablobaşvuru gösterir; açık kısıtlama adı isteğe bağlıdır.

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

C.BENZERSİZ kısıtlamaları kullanma

BENZERSİZ kısıtlamalar nonprimary anahtar sütunları benzersizliği zorlamak için kullanılır.Aşağıdaki örnek bir kısıtlamaya zorlar, Name sütun Product tablo benzersiz olmalı.

Name nvarchar(100) NOT NULL
UNIQUE NONCLUSTERED

D.Varsayılan tanımlarını kullanma

Varsayılan bir değerle (Ekle ve güncelleştir deyimleri) tedarik değeri yok zaman sağlanan.Örneğin, AdventureWorks2008R2 veritabanı arama tablo listeleme çalışanlar doldurun şirketin farklı işleri dahil etGerçek bir açıklama açıkça girildiğinde değil, her iştanımlayan bir sütun altında bir karakter dize varsayılan bir açıklama sağlayın.

DEFAULT 'New Position - title not formalized yet'

Sabitler yanı sıra varsayılan tanımları işlevler ekleyebilirsiniz.Aşağıdaki örnek, geçerli tarih için bir girdi almak için kullanın.

DEFAULT (getdate())

Parametresiz -işlev tarama veri bütünlüğüde artırabilirsiniz.Bir satır eklenen kullanıcı izlemek için kullanıcı için parametresizişlev kullanın.Parantezli parametresiz işlevler almayın.

DEFAULT USER

E.KONTROL kısıtlamalarını kullanmak

İçine girilen değerlere yapılan bir kısıtlama aşağıdaki örnekte gösterildiği CreditRating sütun Vendor tablo.Adsız sınırlamadır.

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

Bu örnek bir sütun , tablogirilen karakter veri deseni kısıtlama adlandırılmış bir sınırlamayla gösterir.

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]')

Bu örnekte, değerlerin belirli bir liste içinde olması gerekir veya belirli bir desen izleyin belirtir.

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

F.Tam tablo tanımını gösterme

tabloiçin tüm kısıtlama tanımları içeren tam bir tablo tanımları aşağıdaki örnekte gösterildiğiPurchaseOrderDetail oluşturulan AdventureWorks2008R2 veritabanı. Örneği çalıştırmak için tablo şeması değiştirilir olduğunu unutmayın 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.Bir xml şema koleksiyonyazılı xml sütun tablo oluşturma

Aşağıdaki örnek içeren bir tablo oluşturur bir xmlsütun xml şema koleksiyonyazılı HRResumeSchemaCollection.DOCUMENT Anahtar sözcüğünü belirtir her örnek , xml veri türü column_name içerebilir tek bir üst -düzey öğe.

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

H.bölümlenmiş tablooluşturma

Aşağıdaki örnek, bir tablo ya da dizin dört bölüme bölüm için bir bölüm işlev oluşturur.Daha sonra örnek, her dört bölüm tutmak filegroups belirten bir bölümleme düzeni oluşturur.Son olarak, örnek bölümleme düzenikullanan bir tablo oluşturur.Bu örnekte, dosya gruplarını veritabanında zaten varsayılır.

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

sütundeğerlerine dayalıcol1 , PartitionTable, bölümler aşağıdaki şekillerde atanır

Dosya grubu

test1fg

test2fg

test3fg

test4fg

Bölüm

1

2

3

4

Değerler

Süt 1 <= 1

col1 > ve 1 col1 <= 100

col1 > ve 100 col1 <= 1.000

col1 > 1000

Ö.Uniqueidentifier kullanarak bir sütunveri türü

Aşağıdaki örnek içeren bir tablo oluşturur bir uniqueidentifier sütun.Örnek tablo yinelenen değerleri ekleme kullanıcılara karşı korumak için bir birincil anahtar kısıtlaması kullanır ve kullanır NEWSEQUENTIALID() işlev , DEFAULT yeni satırlar için değerleri sağlamak için kısıtlamaROWGUIDCOL özellik uygulanır uniqueidentifier sütun için o BT başvuru yapabilirsiniz kullanarak $ROWGUID anahtar sözcüğü.

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.Bir hesaplanmış bir sütuniçin bir ifade kullanma

Aşağıdaki örnek, bir ifade kullanımını gösterir ((low + high)/2) hesaplamak için myavg sütunhesaplanan.

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

K.kullanıcı tanımlı türsütunbaz alınarak hesaplanan bir sütun oluşturma

Aşağıdaki örnek, kullanıcı tanımlı türolarak tanımlanmış bir sütun bir tablo oluştururutf8string, varsayarak türünün derlemeve türü kendisi zaten yaratılmış geçerli veritabanı. İkinci bir sütun temel alınarak tanımlanır utf8string, yöntemkullanır ve ToString() , type(class)utf8string sütuniçin bir değer hesaplamak için.

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

L.İçin hesaplanan bir sütunuser_name işlev kullanma

Aşağıdaki örnek USER_NAME() işlev , myuser_name sütun.

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

M.FILESTREAM sütunolan bir tablo oluşturma

Aşağıdaki örnek içeren bir tablo oluşturur bir FILESTREAM sütun Photo.Bir veya daha fazla tablo varsa, FILESTREAM sütun, tablo biri olması gerekir ROWGUIDCOL sütun.

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

K.Satır sıkıştırma kullanan bir tablo oluşturma

Aşağıdaki örnek, satır sıkıştırması kullanan bir tablo oluşturur.

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

Ek veri sıkıştırma örnekler için bkz: Sıkıştırılmış tablolar ve dizinler oluşturma.

OSeyrek sütun ve bir sütunkümevardır, bir tablo oluşturma

Aşağıdaki örnekler, nasıl seyrek sütunolan bir tablo ve iki seyrek sütun ve bir sütunkümeiçeren bir tablo oluşturmak için Örnekler temel sözdizimini kullanın.Daha karmaşık bir örnek için bkz: Seyrek sütunlar kullanma ve Sütun kümelerini kullanma.

Bu örnek, seyrek sütuniçeren bir tablo oluşturur.

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

Bu örnek iki seyrek sütun ve adlı bir sütunküme içeren bir tablo oluşturur 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 ) ;