tablo (Transact-SQL) CREATE

Yeni bir tablo oluşturur.

Topic link iconTransact-SQL sözdizimi kuralları

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>

Bağımsız değişkenler

  • database_name
    Is the name of the database in which the table is created.database_name must specify the name of an existing database.Belirtilmezse, database_name Geçerli veritabanı için varsayılan değeri. Geçerli bağlantı için oturum açma tarafından belirtilen veritabanında varolan bir kullanıcı KIMLIĞI ile ilişkili olmalıdır. database_name, ve bu kullanıcı KIMLIĞI, CREATE tablo izni olması gerekir.

  • schema_name
    Adı, şemaya yeni tablo ait.

  • table_name
    Yeni adı tablo.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
    Bir sütun adı tablo.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.If column_name Belirtilen değil, adını bir timestamp sütunun varsayılan değeri timestamp.

  • computed_column_expression
    Değerini tanımlayan bir ifade mi bir hesaplanan sütun.hesaplanan sütun içinde fiziksel olarak depolanmayan bir sanal sütundur tablo, sütun PERSISTED işaretli değilse.Diğer sütunlar aynı kullanan bir ifadeden hesaplanan sütun tablo.Örneğin, bir hesaplanan sütun tanımı olabilir: Maliyet AS Fiyat * Miktar.Ifade noncomputed sütun adı, sabit, işlev, değişken ve bunlar tarafından bir veya daha çok işleç bağlı herhangi bir birleşimi olabilir.Ifade bir alt sorgu olması veya diğer ad ad veri türlerini içerir.

    Hesaplanan sütunlar seçin listeler, WHERE yan tümcesi, ORDER BY yan veya, normal ifadeler, aşağıdaki özel durum olmadan kullanılabilir diğer konumlarda kullanılabilir:

    • hesaplanan sütun, DEFAULT veya yabancı anahtar kısıtlaması tanım veya NOT NULL kısıtlaması tanımı ile kullanılamaz.Ancak, hesaplanan sütun olarak bir anahtar sütununa bir dizin veya birincil anahtar veya UNIQUE sınırlamasıyla, hesaplanan sütun değeri, belirli bir ifade tarafından tanımlanır ve sonuç veri türü dizin sütunlarında izin verilen kullanılabilir.

      Örneğin, tablo tamsayı sütunlar vardır. C and b, hesaplanan sütun a + b dizin oluşturulmuş, ancak hesaplanan sütun olabilirbir + DATEPART (gg, GETDATE()) sıralanamıyor, çünkü bu değer izleyen etkinleştirilmelerinde değişebilir.

    • hesaplanan sütun, bir INSERT veya UPDATE deyim işleminin hedefi olamaz.

    Not

    Her satırda bir tablo hesaplanan sütunda, söz konusu olan 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 alan, hesaplanan bir sütun null atanabilirlik tarafından otomatik olarak belirlenen Database Engine. Olası underflows veya taşma de NULL sonuçlar için yalnızca nonnullable sütun varsa, sonuç çoğu ifade null olarak kabul edilir.COLUMNPROPERTY işleviyle kullanmak AllowsNull Tablo içinde herhangi bir hesaplanmış sütun null atanabilirlik araştırmak için özellik. ISNULL ile belirterek nonnullable bir null ifade dönüştürülebilir check_expression Sabit, sabit değer nonnull olduğu için herhangi bir BOş sonuç değiştirdi. Hesaplanan sütunlar ortak dil çalışma zamanı (CLR) kullanıcı tanımlı tür ifadelerini temel türüne BAşVURULAR izni gereklidir.

  • KALICI
    Belirleyen SQL Server Database Engine fiziksel olarak hesaplanan değerleri saklamak tablo ve hesaplanan sütun bağımlı olduğu diğer sütunlara güncelleştirildiği değerleri güncelleştirin. hesaplanan sütun PERSISTED olanak işaretleme deterministic ancak değil kesin olan hesaplanan sütun üzerinde bir dizin oluşturun.Daha fazla bilgi için bkz:Hesaplanan sütunlar üzerinde dizin oluşturma.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 | " varsayılan " }
    bölümleme düzeni ya da, tabloyu depolandığı dosya grubu belirtir.If <partition_scheme> , tablodur, bölümler üzerinde depolanan bölümlenmiş tablo olarak belirtilen bir küme, belirtilen bir veya daha fazla dosya grupları <partition_scheme>. If filegroup , tablo adlandırılmış dosya grubu depolanan belirtildi. dosya grubu, veritabanı içinde bulunmalıdır.If "varsayılan" belirtilen veya tablo ON hiç belirtilmezse, varsayılan dosya grubu üzerinde depolanır.Depolama düzeneği CREATE tablo içinde belirtildiği gibi bir tablonun, daha sonra değiştirilemez.

    {} ÜZERİNDE<partition_scheme> | filegroup | " varsayılan "} birincil anahtar veya UNIQUE sınırlaması bulunan da belirtilebilir. Bu kısıtlamalar, dizinler oluşturun.If filegroup , adlandırılmış dosya grubu içinde depolanan dizin belirtildi. If "varsayılan" belirtilen veya AÇıK tüm belirtilmemişse, dizin aynı dosya grubu tablo olarak depolanır.birincil anahtar veya UNIQUE sınırlaması, kümelenmiş dizin oluşturur, tablo için veri sayfaları aynı dosya grubu dizini olarak depolanır.CLUSTERED belirtilen veya sınırlama yoksa, kümelenmiş dizin oluşturur ve bir <partition_scheme> farklıdır, belirtilen <partition_scheme> veya filegroup Tablo tanımını veya tersi, kısıtlama tanımı ödenen ve diğer yoksayılacak.

    Not

    Bu bağlamda, varsayılan anahtar değil.It is an identifier for the default filegroup and must be delimited, as in ON "default" or ON [default].If "varsayılan" belirtilir QUOTED_IDENTIFIER seçeneği, geçerli oturum için AÇıK olması gerekir.Varsayılan ayar budur.Daha fazla bilgi için bkz:küme QUOTED_IDENTIFIER (Transact-SQL).

    Not

    Bölümlendirilmiş bir oluşturduktan sonra tablo, LOCK_ESCALATION seçeneği ayarı dikkate tablo AUTO için.Bu, eşzamanlılık tablo yerine bölümü (HoBT) düzeyine yöneticinize iletin kilit etkinleştirerek iyileştirebilir.Daha fazla bilgi için bkz:ALTER tablo (Transact-SQL).

  • TEXTIMAGE_ON { filegroup| "default" }
    Anahtar sözcükleri belirtmek misiniz text, ntext, image, xml, varchar(max), nvarchar(max), varbinary(max), ve CLR kullanıcı tanımlı türü sütunlar üzerinde belirtilen dosya grubu depolanır.

    Büyük bir değer sütun yok ise TEXTIMAGE_ON izin verilmiyor tablo.TEXTIMAGE_ON belirtilemez <partition_scheme> belirtildi. If "varsayılan" belirtilen veya büyük değere sütunları TEXTIMAGE_ON hiç belirtilmezse varsayılan dosya grubu depolanır.CREATE tablo içinde belirtilen herhangi bir büyük değere sütun veri depolama, daha sonra değiştirilemez.

    Not

    Bu bağlamda, varsayılan anahtar değil.It is an identifier for the default filegroup and must be delimited, as in TEXTIMAGE_ON "default" or TEXTIMAGE_ON [default].If "varsayılan" belirtilir QUOTED_IDENTIFIER seçeneği, geçerli oturum için AÇıK olması gerekir.Varsayılan ayar budur.Daha fazla bilgi için bkz:küme QUOTED_IDENTIFIER (Transact-SQL).

  • {FILESTREAM_ON partition_scheme_name | dosya grubu | "varsayılan" }
    FILESTREAM veriler için dosya grubu belirtir.

    Tablo FILESTREAM veri içerir ve tablo bölümlendirilir FILESTREAM_ON yan tümce dahil edilmesi ve FILESTREAM dosya gruplarını bir bölümleme düzeni belirtmelisiniz.Bu bölümleme düzeni bölümü ile aynı işlev ve bölüm sütunları bölümleme şeması tablo için kullanmanız gerekir; aksi halde hata oluşur.

    Tablo bölümlendirilir, FILESTREAM sütun yeniden bölümlenmesi edemiyor.FILESTREAM veri tablosu için tek bir dosya grubu depolanmalıdır.Bu dosya grubu FILESTREAM_ON içinde belirtilen yan tümce.

    Tablo olmayan bölümlendirilir ve FILESTREAM_ON yan tümce belirtilmezse, VARSAYıLAN özellik kümesi olan FILESTREAM dosya grubu kullanılır.Hiçbir FILESTREAM dosya grubu varsa, bir hata ortaya çıkar.

    • AÇıK olduğu gibi ve TEXTIMAGE_ON, CREATE tablo kullanarak FILESTREAM_ON değiştirilemez için küme değer aşağıdaki durumlar dışında:

    • C DİZİN OLUŞTURMA deyim, kümelenmiş dizin içinde bir yığın dönüştürür.Bu durum, bir başka FILESTREAM dosya grubu, bölümleme düzeni veya NULL belirtilebilir.

    • C BIRAKMA DİZİNİ deyim kümelenmiş dizin için bir yığın dönüştürür.Bu durumda, farklı FILESTREAM dosya grubu, bölümleme düzeni veya "varsayılan" belirtilebilir.

    FILESTREAM_ON'da dosya grubu <dosya grubu> yan tümcesinde veya bir bölümleme düzeni adlı her FILESTREAM dosya grubu için bir dosya grubunu tanımlanan bir dosya olmalıdır. Bu dosyayı kullanarak tanımlanması gereken bir VERİTABANI OLUŞTURMA or alter VERİTABANI deyim; aksi halde hata oluşur.

    Ilgili FILESTREAM konuları için bkz: Tasarlama ve FILESTREAM depolama uygulama.

  • [ type_schema_name**.** ] type_name
    Sütun ve ait olduğu şema veri türünü belirtir.Veri türü aşağıdakilerden biri olabilir:

    • Bir sistem veri türü.

    • Bir diğer ad türünü temel alan bir SQL Server Sistem veri türü. diğer ad ad veri türleri, Tablo tanımı kullanılmadan önce CREATE TYPE deyim ile oluşturulur.CREATE tablo deyim sırasında NULL veya NOT NULL atama bir diğer ad ad veri türü için geçersiz kılınabilir.Ancak, uzunluğu belirtimi değiştirilemez; bir CREATE tablo deyiminde bir diğer ad veri türünün uzunluğu tarif edilemez.

    • A CLR kullanıcı tanımlı türü.Tablo tanımı kullanılmadan önce CLR türü kullanıcı tanımlı TÜR CREATE deyim ile oluşturulur.CLR türü üzerinde kullanıcı tanımlı bir sütun oluşturmak için , BAşVURULAR izin bağlı gereklidir.

    If type_schema_name belirtilmemiş, SQL Server Database Engine başvuruları type_name Aşağıdaki sıra ile:

    • The SQL Server system data type.

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

    • The dbo schema in the current database.

  • precision
    Belirtilen veri türü için duyarlık belirtilir.Geçerli duyarlık değerleri hakkında daha fazla bilgi için bkz: Duyarlık, Ölçek ve uzunluğu.

  • scale
    Belirtilen veri türünün ölçeği belirtilir.Geçerli ölçek değerleri hakkında daha fazla bilgi için bkz: Duyarlık, Ölçek ve uzunluğu.

  • en büyük
    Yalnızca geçerli varchar, nvarchar, ve varbinary 2 depolamak için kullanılan veri türlerini ^ 31 bayt ve karakter ve ikili veri, 2 ^ 30 Unicode veri baytı.

  • İÇERİĞİ
    Çıktıda her örnek xml veri türü column_name birden çok üst düzey öğesi içerebilir. IÇERIK yalnızca geçerli xml verileri yazın ve yalnızca bu güvenlik açığından belirtilebilir xml_schema_collection Ayrıca belirtildi. Aksi takdirde varsayılan belirtilen, CONTENT davranıştır.

  • BELGE
    Çıktıda her örnek xml veri türü column_name yalnızca bir üst düzey öğesi içerebilir. DOCUMENT yalnızca geçerli xml verileri yazın ve yalnızca bu güvenlik açığından belirtilebilir xml_schema_collection Ayrıca belirtildi.

  • xml_schema_collection
    Yalnızca geçerli xml bir XML şema koleksiyon türü ile ilişkilendirmek için veri türü. Yazmadan önce bir xml sütun için bir şema, şema önce veritabanında kullanılarak oluşturulmalıdır xml ŞEMA KOLEKSİYONU OLUŞTUR..

  • VARSAYILAN
    Sütun için bir değer açık olarak bir ekleme sırasında sağlanan verilen değerini belirtir.Tanımlanan dışındaki herhangi bir sütun için VARSAYıLAN tanımları uygulanabilir. timestamp, veya KIMLIK özellik olanlar. kullanıcı tanımlı tür bir sütun için varsayılan bir değer belirtilmişse, türü örtülü bir dönüştürme desteklemelidir constant_expression kullanıcı tanımlı tür için. Tablo bırakılan DEFAULT tanımları kaldırılır.Bir karakter dizesi; skaler fonksiyon (bir sistem, kullanıcı tanımlı veya CLR işlev); veya null bir sabit değer yalnızca, varsayılan olarak kullanılabilir.' Ün önceki sürümüyle olan uyumluluğu korumak için SQL Server, bir kısıtlama adı için bir VARSAYıLAN atanabilir.

  • constant_expression
    Bir sabit değer (NULL) veya sütun için varsayılan değer olarak kullanılan bir sistem işlev belirtilir.

  • KİMLİK
    Yeni bir sütun kimlik sütunu olduğunu gösterir.Için yeni bir satır eklendiğinde tablo, Database Engine benzersiz, artımlı bir değeri, sütun için sağlar. Kimlik sütunları genellikle birincil anahtar kısıtlamaları ile tablo için benzersiz bir satır tanımlayıcısı olarak kullanılır.KIMLIK özellik atanabilir tinyint, smallint, int, bigint, decimal(p,0), veya numeric(p,0) sütunlar. Her tablo için yalnızca bir kimlik sütun oluşturulabilir.Ilişkili varsayılan değerler ve VARSAYıLAN kısıtlamalar, kimlik sütun ile kullanılamaz.Hem çekirdek ve Artım veya hiçbiri belirtilmeli.Hiçbiri belirtilmediyse, (1,1) varsayılandır.

  • seed
    Yüklenen ilk satırı için kullanılan değer tablo.

  • increment
    Önceki satırın Kimlik değerini eklenen artımlı değeri, yükledi.

  • ÇOĞALTMA İÇİN DEĞİL
    OLUŞTURMA, tablo ekstresi IÇIN NOT çoğaltma yan tümce IDENTITY özellik, yabancı anahtar kısıtlamaları ve CHECK kısıtlamaları için belirtilebilir.Bu yan tümce için KIMLIK özellik belirtilmemişse, çoğaltma aracıları ekler gerçekleştirdiğinizde değerleri kimlik sütunlarının artırılır değil.Bu yan tümce için bir kısıtlama belirtilirse, çoğaltma aracıları Ekle gerçekleştirdiğinizde kısıtlamayı zorlanmaz, güncelleştirme veya silme işlemlerine.Daha fazla bilgi için bkz:Sınırlamaları, kimlik ve Tetikleyicileri NOT ile denetlemek IÇIN çoğaltma.

  • rowguidcol
    Yeni bir sütun için bir satır GUID sütun olduğunu gösterir.Yalnızca bir uniqueidentifier sütun tablo başına ROWGUIDCOL sütun olarak belirlenebilir. ROWGUIDCOL özellik uygulama $ ROWGUID kullanarak başvurulacak sütun sağlar.ROWGUIDCOL özellik yalnızca atanabilecek bir uniqueidentifier sütun. ROWGUIDCOL anahtar sözcüğü, geçerli veritabanı uyumluluk düzey 65 ise veya alt değil.Daha fazla bilgi için bkz:sp_dbcmptlevel (Transact-SQL).Kullanıcı tanımlı veri türü sütunlarındaki ROWGUIDCOL ile belirlenen edemiyor.

    ROWGUIDCOL özellik, saklanan değerleri benzersizliğini zorlamaz sütun.ROWGUIDCOL de otomatik olarak eklenen yeni satırlar için değerleri oluşturmuyor tablo.Her sütun için benzersiz değerler üretmek için , aşağıdakilerden birini kullanmak newid or newsequentialid işlevEKLEME ifadeleri veya bu işlevler, sütun için varsayılan olarak kullanın.

  • SEYREK
    Sütun seyrek bir sütunu olduğunu gösterir.Depolama Birimi seyrek sütun null değerler için en iyi duruma getirilmiştir.Seyrek sütunları belirlenmiş olarak bir NOT NULL.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 depolanmasında belirtir varbinary(max) BLOB verileri.

    tablo Da bir sütun olmalıdır uniqueidentifier veri türü ROWGUIDCOL özniteliğine sahip. Bu sütun null değerlere izin vermek gerekir ve UNIQUE veya birincil anahtar tek sütunlu kısıtlaması olmalıdır.Sütun için GUID değeri bir applicationwhen, veri ekleme veya NEWID () işlevini kullanan bir VARSAYıLAN kısıtlama olarak girilmesi gerekir.

    ROWGUIDCOL sütun bıraktı ve ilgili sınırlamalar, tablo için tanımlanmış bir FILESTREAM sütun çalışırken değiştirilemez.Yalnızca son FILESTREAM sütun kesilmeden sonra ROWGUIDCOL sütun kesilmesine.

    Bir sütun için FILESTREAM depolama özniteliğine belirtildiğinde, o sütun için tüm değerleri FILESTREAM veri kapsayıcı dosya sisteminde depolanır.

  • collation_name HARMANLA
    Sütun harmanlama belirtir.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.Belirtilmezse, sütun harmanlama kullanıcı tanımlı veri türü, sütun, bir kullanıcı tanımlı veri türü ise veya veritabanının varsayılan harmanlama olarak atanır.

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

    COLLATE yan tümcesini hakkında daha fazla bilgi için bkz: (Transact-SQL) HARMANLA.

  • KISITLAMA
    Bir birincil anahtar, NOT NULL, UNIQUE, yabancı anahtar veya CHECK kısıtlaması tanımı başlangıcını gösteren isteğe bağlı bir anahtar sözcük olarak belirtilir.Daha fazla bilgi için bkz:Kısıtlamaları.

  • constraint_name
    Bir kısıtlama adıdır.Kısıtlama adları olan şema içinde benzersiz olmalıdır tablo ait.

  • null | OLMAYAN BOŞ
    Içinde null değerlere izin verilip verilmediğini belirlemek sütun.NULL kesinlikle bir kısıtlaması değil, ancak yalnızca gibi belirtilen NOT NULL.NOT yalnızca PERSISTED de belirtilirse, hesaplanan sütunlar için NULL belirtilebilir.

  • BİRİNCİL ANAHTAR
    Kısıtlamayı zorlar iş varlık bütünlüğü belirtilen bir sütun veya sütunlar boyunca benzersiz dizin.Her tablo için yalnızca bir birincil anahtar kısıtlaması oluşturulamaz.

  • BENZERSİZ
    Varlık sağlayan bir kısıtlama mı bütünlük belirtilen bir sütun veya sütunlar boyunca benzersiz dizin.A tablo birden çok UNIQUE kısıtlamaları olabilir.

  • KÜMELENMİŞ | KÜMELENMEMİŞ
    Kümelenmiş bir ya da kümelenmemiş bir dizin için birincil anahtar veya UNIQUE sınırlaması oluşturulduğunu gösterir.CLUSTERED varsayılanına birincil anahtar kısıtlamaları ve NONCLUSTERED UNIQUE kısıtlamaları varsayılan.

    CREATE tablo deyiminde, CLUSTERED için yalnızca bir kısıtlama olarak belirtilebilir.KÜMELENMIŞ bir UNIQUE sınırlamasıyla için belirtilen bir birincil anahtar kısıtlaması de belirtilirse, birincil anahtar NONCLUSTERED için varsayılan kullanılır.

  • YABANCI ANAHTAR BAŞVURULARI
    Sütun veya sütun veri tutarlılığı sağlayan bir kısıtlama belirtilir.yabancı anahtar kısıtlamaları sütunundaki her bir değeri karşılık gelen başvurulan sütun veya sütunları başvurulan varolduğunu gerektiren tablo.yabancı anahtar kısıtlamaları, birincil anahtar veya UNIQUE kısıtlamaları, başvurulan olan sütunlar baþvurabilirsiniz tablo veya bir benzersiz dizin başvurulan ', başvurulan sütunları tablo.Hesaplanmış sütunlarda yabancı anahtarları da PERSISTED işaretlenmelidir.

  • [ schema_name**.**] referenced_table_name]
    Adı tablo yabancı anahtar kısıtlaması ve ait olduğu şema başvuruyor.

  • **(**ref_column [ ,... n ] )
    Gelen bir sütun veya sütun listesi mi tablo yabancı anahtar kısıtlaması tarafından başvurulan.

  • DELETE { ONEYLEM YOK | CASCADE | NULL küme | küme DEFAULT}
    Satırlara eylem olacağını belirtir tablo oluşturulan satırları başvurusal bir ilişki vardır ve başvurulan satır üst nesneden silinir tablo.NO eylem varsayılandır.

    • EYLEM YOK
      The Database Engine raises an error and the delete eylem on the row in the parent tablo is rolled back.

    • ART ARDA SIRALI
      Karşılık gelen satırlar arasında başvuru siliniyor tablo üst satır silinmişse tablo.

    • null küme
      yabancı anahtar oluşturan tüm değerler küme için üst tablosundaki ilgili satırın silinirse, NULL.Bu sınırlama yürütmek yabancı anahtar sütunları, null olmalıdır.

    • KÜME VARSAYILAN
      Buna karşılık gelen için üst satır, yabancı anahtar oluşturan tüm değerlerin varsayılan değerlerine küme tablo silinir.Bu sınırlama yürütmek, varsayılan tanımlarını tüm yabancı anahtar sütunları olması gerekir.Bir sütuna NULL hiçbir açık varsayılan değer küme ise, NULL sütunun örtülü bir varsayılan değer olur.

    CASCADE belirtmezseniz, tablo mantıksal kayıtları kullanan bir birleştirme yayınında eklenecektir.Mantıksal kayıtları hakkında daha fazla bilgi için bkz: Değişiklikleri mantıksal kayıtlarıyla ilgili satırları gruplandırma.

    Tablo üzerinde ON DELETE INSTEAD OF tetikleyicisi varsa, DELETE CASCADE tanımlanamaz.

    Örneğin, AdventureWorks Veritabanı, ProductVendor başvuru ilişkisi olan tablo varSatıcı tablosudur.The ProductVendor.VendorID yabancı anahtar references the Vendor.VendorID birincil anahtar.

    Üzerinde bir satırda kullanılan DELETE deyim yürütüldüğünde, Satıcı tablo ve ON DELETE CASCADE eylem için belirtildiProductVendor.VendorID, the Database Engine bir veya daha fazla bağımlı satır denetlediği ProductVendor tablosudur.Herhangi bir varsa, bağımlı satırları ProductVendor tablo silinir ve bu da başvurulan satırıSatıcı tablosudur.

    Tersi durumda, NO eylem belirtilirse, Database Engine bir hata üretir ve silme işlemi geri alır Satıcı içinde en az bir satır, satırProductVendorbaşvurduğu tablo .

  • UPDATE { ONEYLEM YOK | CASCADE | NULL küme | küme DEFAULT}
    Satırlara eylem olacağını belirtir tablo satırları başvurusal bir ilişki vardır ve başvurulan satır üst öğede güncelleştirilir değiştirilmediğinden tablo.NO eylem varsayılandır.

    • EYLEM YOK
      The Database Engine raises an error, and the update eylem on the row in the parent tablo is rolled back.

    • ART ARDA SIRALI
      Başvuru karşılık gelen satır güncelleştirildi tablo üst satır güncelleştirildiğinde tablo.

    • null küme
      Buna karşılık gelen satır, üst yabancı anahtar oluşturan tüm değerleri NULL olarak ayarlanan tablo güncelleştirilir.Bu sınırlama yürütmek yabancı anahtar sütunları, null olmalıdır.

    • KÜME VARSAYILAN
      Üst tablosundaki ilgili satırın güncelleştirildiği zaman, yabancı anahtar oluşturan tüm değerlerin varsayılan değerlerine küme.Bu sınırlama yürütmek, varsayılan tanımlarını tüm yabancı anahtar sütunları olması gerekir.Bir sütuna NULL hiçbir açık varsayılan değer küme ise, NULL sütunun örtülü bir varsayılan değer olur.

    CASCADE belirtmezseniz, tablo mantıksal kayıtları kullanan bir birleştirme yayınında eklenecektir.Mantıksal kayıtları hakkında daha fazla bilgi için bkz: Değişiklikleri mantıksal kayıtlarıyla ilgili satırları gruplandırma.

    UPDATE CASCADE, değiştirilmiş tablo üzerinde bir ON UPDATE INSTEAD OF tetikleyicisi varsa tanımlanamaz.

    Örneğin, AdventureWorks Veritabanı, ProductVendor başvuru ilişkisi olan tablo varSatıcı Tablo: ProductVendor.VendorID yabancı anahtar başvuruyorVendor.VendorID birincil anahtar.

    Bir satırda bulunan bir UPDATE deyim yürütüldüğünde, Satıcı tablo ve ON UPDATE CASCADE eylem için belirtildiProductVendor.VendorID, the Database Engine bir veya daha fazla bağımlı satır denetlediği ProductVendor tablosudur.Herhangi bir varsa, bağımlı satırları ProductVendor tablo güncelleştirilir ve ayrıca başvurulan satırıSatıcı tablo.

    Tersi durumda, NO eylem belirtilirse, Database Engine bir hata üretir ve güncelleştirmenin eylem geri alır Satıcı içinde en az bir satır, satırProductVendorbaşvurduğu tablo .

  • ONAY
    Olası bir sütun veya sütunlara girilen değerler sınırlayarak, etki alanı bütünlüğü zorlar bir kısıtlama belirtilir.Hesaplanan sütunlar kısıtlamaları da PERSISTED işaretlenmelidir CHECK.

  • logical_expression
    TRUE veya FALSE döndürür mantıksal bir ifade olarak belirtilir.diğer ad ad veri türleri, ifade olamaz.

  • column
    Bir sütun veya tablo kısıtlamaları kısıtlama tanımı içinde kullanılan sütunları göstermek için kullanılan ayraçlar, sütun listesi belirtilir.

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

  • partition_scheme_name
    Bölümler bölümlenmiş tablo eşleştirilir dosya gruplarını tanımlayan bölümleme düzeni adıdır.bölümleme düzeni, veritabanı içinde bulunmalıdır.

  • [ partition_column_name**.** ]
    Karşı bölümlenmiş tablo bölümlenir sütun belirler.Sütun belirtilen eşleşmelidir bölümleme işlevi, partition_scheme_name veri türü, uzunluk ve duyarlığı bakımından kullanıyor. Bu bölüm işlevde hesaplanmış bir sütun, açıkça PERSISTED işaretlenmelidir.

    Important noteImportant Note:

    bölümleme sütun bölümlendirilmiş tabloları ve ayrıca, kaynakları nonpartitioned tablolar veya ALTER tablo... ANAHTAR işlem hedefi NOT NULL belirtmeniz önerilir.Bunu yapmak için null değerleri denetlemek sütun bölümleme hakkında herhangi bir CHECK kısıtlamaları olmayan emin olur.Daha fazla bilgi için bkz:Veri bölümü değiştirme'yi kullanarak verimli aktarılıyor.

  • WITH FILLFACTOR **=**fillfactor
    Tam olarak nasıl belirtir Database Engine Her saklamalıdır dizin sayfa, dizin verileri depolamak için kullanılır. Kullanıcı tanımlı fillfactor değerler, 1 ile 100 arasında olabilir. Bir değer belirtilmezse, varsayılan değer 0'dır.doldurma faktörü 0 ve 100 tüm respects aynı değerlerdir.

    Important noteImportant Note:

    FILLFACTOR belgelenmesi = fillfactor birincil anahtar veya UNIQUE kısıtlamaları için geçerli dizin seçeneği yalnızca geriye dönük uyumluluk için korunur, ancak bu şekilde gelecekte belgelenecektir değil olarak yayımlar.

  • column_set_name xml column_set İÇİN all_sparse_columns
    Sütun adı küme.Bir sütunu küme tüm tablonun sütunları seyrek yapılandırılmış bir çıkış birleştiren bir türlenmemiş XML gösterimidir.Sütun kümeleri hakkında daha fazla bilgi için bkz: Sütun kümesi'ni 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:

    • YOK
      Tablo veya belirtilen bölüm sıkıştırılır değil.

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

    • SAYFA
      Tablo veya belirtilen bölümler 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.

  • ON PARTITIONS ( { <partition_number_expression> | <range> } [ ,...n ] )
    DATA_COMPRESSION ayarı uygulandığı bölümler belirtir.Tablo bölümlendirilir ON BÖLÜM bağımsız değişkeni bir hata oluşturur.ON BÖLÜM yan tümce sağlanıyorsa, DATA_COMPRESSION seçeneği bölümlenmiş tablo tüm bölümler için geçerlidir.

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

    • Örneğin, bir bölümünün bölüm numarasını girin: BÖLÜMLERİNDE (2).

    • Bölüm numaralarını aralarına virgül koyarak, örneğin belirli bölümlerini için sağlanmıştır: DİSK (1, 5).

    • Örnek aralıkları hem de tek tek bölümleri sağlar: BÖLÜMLER, (2, 4, 6 8'in YAPıLıR) ON

    <Aralık> Bölüm numaralarını sözcüğü YAPıLıR, örneğin ayrılmış belirtilebilir: BÖLÜMLERİNDE (6-8).

    Için küme veri sıkıştırma, farklı bölümleri için farklı türde 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 çok dizin seçeneklerini belirtir.Bu seçenekler eksiksiz bir açıklaması için bkz: INDIS (Transact-SQL) CREATE.

  • PAD_INDEX = {ON | DEVRE DIŞI }
    ON, yüzde olarak boş alan tarafından belirtilen FILLFACTOR dizin orta düzey sayfalara uygulanır.KAPALı veya bir FILLFACTOR değeri, onu belirtilmedi orta düzey sayfalar dizin en fazla boyutu en az bir satır içerebilir için yeterli boş alan düşünmeden bırakarak kapasite yakınında doldurulur küme ara sayfada bulunan anahtarların.Varsayılan değer KAPALı'dır.

  • 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.Varsayılan değer 0'dir.doldurma faktörü 0 ve 100 tüm respects aynı değerlerdir.

  • IGNORE_DUP_KEY = {ON | DEVRE DIŞI }
    Yinelenen anahtar değerleri benzersiz dizin eklemek bir ekleme işlemi çalıştığında hata yanıtını belirtir.IGNORE_DUP_KEY seçeneği, yalnızca dizin oluşturulan veya yeniden sonra operasyonunu eklemek için geçerlidir.Seçeneği çalıştırırken hiçbir etkisi olmaz. DİZİN OLUŞTURMA, DİZİN DEĞİŞTİR, or GÜNCELLEŞTİRME.Varsayılan değer KAPALı'dır.

    • AÇIK
      Bir uyarı iletisi, yinelenen anahtar değerleri benzersiz dizin eklendiğinde gerçekleşir.Yalnızca benzersiz kısıtlamayı ihlal satır başarısız olacaktır.

    • DEVRE DIŞI
      Bir hata iletisi, yinelenen anahtar değerleri benzersiz dizin eklendiğinde gerçekleşir.Tüm EKLEME işlemini geri alınır.

    IGNORE_DUP_KEY olamaz küme görünümü üzerinde oluşturulan dizinler benzersiz olmayan dizinler, XML dizinler, kayma dizinleri ve süzülmüş dizinler için açık.

    IGNORE_DUP_KEY görüntülemek için kullanın. sys.Indexes.

    WITH IGNORE_DUP_KEY WITH IGNORE_DUP_KEY için geriye dönük uyumlu sözdiziminde eşdeğerdir ON =.

  • STATISTICS_NORECOMPUTE**=** { ON | DEVRE DIŞI }
    Güncel olmayan dizin istatistikleri değil otomatik olarak recomputed ON ne zaman.Ne zaman OFF, otomatik istatistik güncelleştirme etkin duruma getirilir.Varsayılan değer KAPALı'dır.

  • ALLOW_ROW_LOCKS**=** { AÇIK | OFF }
    Dizin eriştiğinizde, bu AÇıK, satır kilitlerin izin verilir.The Database Engine determines when row locks are used.Ne zaman OFF, satır kilidi kullanılmaz.Varsayılan AÇıK'tır.

  • ALLOW_PAGE_LOCKS**=** { AÇIK | OFF }
    Dizin eriştiğinizde, bu AÇıK, sayfa kilidi izin verilir.The Database Engine determines when sayfa locks are used. Ne zaman OFF, sayfa kilidi kullanılmaz.Varsayılan AÇıK'tır.

Remarks

SQL Server 2008 veritabanı başına en çok 2 milyar tablo olabilir.Tanımlanmış bir sütun içeren BIR tablo kümesi, en çok 30.000 en fazla 1024 sparse olmayan sütunlarla + hesaplanan sütunlar olabilir.Sütun kümeleri olan tablo, 1024 sütunları sınırlıdır.Satır ve toplam boyutu tablo yalnızca kullanılabilir depolama ile sınırlıdır.En fazla satır başına bayt 8,060 sayısıdır.Bu kısıtlama, tablolar için rahat varchar, nvarchar, varbinary, veya sql_variant Toplam tanımlanan tablo genişliği 8,060 bayt aşmasına neden olan sütun. Her biri bu sütunların uzunlukları hala çok 8.000 bayt sınırı içinde kalan gerekir, ancak bunların birleştirilmiş genişlikleri tablodaki 8,060 bayt sınırını aşabilir.Daha fazla bilgi için bkz:Satır-8 KB Exceeding veri taşması.

Her tablo, en çok 999 kümelenmemiş dizin ve 1 kümelenmiş dizin içerebilir.Bu tablo için tanımlanmış birincil anahtar ve UNIQUE kısıtlamaları desteklemek için oluşturulan dizinler içerir.

Boşluk genellikle tablolar ve dizinler bir ölçüde artırımları ile tahsis edilen bir saat.Tablo ya da dizin oluşturulduğunda, tek bir kapsam doldurmak için yeterli sayfaları taşıdığından kadar karma kapsamlarını sayfaları tahsis edilir.Şu anda ayrılmış kapsamlarını tam duruma her Tekdüzen bir ölçüde doldurmak için yeterli sayfaları taşıdığından sonra başka bir kapsam tahsis edilir.Ayrılan ve tablo tarafından kullanılan alan miktarını hakkında bir rapor yürütmek sp_spaceused.

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

Bir tablo oluşturduğunuzda, tablo oluşturulduğunda seçeneği KAPALı olarak küme olsa bile tırnak içine ALıNMıŞ TANıMLAYıCı seçeneği her zaman AÇıK, tablo için meta veriler depolanır.

Geçici tablolar

Yerel ve genel geçici tablolar oluşturabilirsiniz.Yalnızca geçerli yerel geçici tablolar görülebilir oturum, ve tüm oturum s genel geçici tablolar görülebilir.Geçici tablolara yeniden bölümlenmesi edemiyor.

Tek bir sayı işareti (#) ile yerel geçici tablo adlarının önüne ek koytable_name) ve genel olarak geçici tablo adları çift sayı işareti ile önek (##table_name).

SQL deyimleri için belirtilen değer'i kullanarak geçici tablo başvurusu. table_name CREATE TABLE deyim içinde örneğin:

Bunlar, tek bir saklı yordam veya toplu iş içinde birden fazla geçici tablo oluşturulursa, farklı adlara sahip olmalıdır.

Yerel geçici tablo, bir saklı yordam veya aynı anda yapılabilecek uygulama oluşturulursa saat, birden çok kullanıcı tarafından Database Engine Farklı kullanıcılar tarafından oluşturulan tablolar ayırtedebilmelidir olmalıdır. The Database Engine does this by internally appending a numeric suffix to each local geçici tablo name. Geçici tablo olarak depolanan tam adını sysobjects table in tempdb CREATE TABLE deyim ve sistem tarafından oluşturulan sayısal sonek belirtilen tablo adı oluşur.Soneki, izin vermek için table_name geçici bir yerel ad, 116 karakteri aşamaz için belirtildi.

Bunlar kapsam dışına gittiğinizde geçici tablolara otomatik olarak açıkça DROP tablo'ı kullanarak bırakılan sürece bırakılır:

  • Yerel bir saklı yordamın içinde oluşturulan geçici tablo, saklı yordam tamamlandığında otomatik olarak bırakılır.Tablo, tablo oluşturan saklı yordam yürütülme iç içe geçmiş bir saklı yordamlar olarak başvurulabilir.Tablo, tablo oluşturan bir saklı yordamı çağıran işlem tarafından başvurulamaz.

  • Diğer tüm yerel geçici tablo, geçerli oturumun sonunda otomatik olarak bırakılır.

  • Tablo için oluşturulan oturum sona erdiğinde genel geçici tablolara otomatik olarak bırakılır ve bunları başvuran tüm görevleri durdurdunuz.Bir görev arasındaki ilişkiyi ve bir tablo yalnızca tek bir süresince tutulur Transact-SQL deyim. Bu, genel olarak geçici tablo, son bitiminde bırakılır anlamına gelir: Transact-SQL oluşturma oturum sona erdi, etkin olarak tabloya başvuran deyim.

Yerel geçici tablo, saklı yordam içinde oluşturulan tetikleyicisi önce saklı yordam oluşturulan geçici bir tablo adıyla aynı olabilir veya Tetikleyici adı verilir.Ancak, sorgu geçici bir tabloya başvuran ve aynı ada sahip iki geçici tablo, o anda var, bunu hangi tablonun, sorgunun karşı giderilmiş olup tanımlanmadı.Iç içe geçmiş bir saklı yordamlar, onu çağıran saklı yordam tarafından oluşturulan geçici tablo adıyla aynı olan geçici tablolar da oluşturabilirsiniz.Ancak, iç içe geçmiş bir yordam içinde oluşturulduğu tabloyu çözümlemeye değişiklikler için tablo aynı yapısıyla aynı sütun adları, arama yordamında oluşturulan tablo olması gerekir.Bu, aşağıdaki örnekte gösterilmiştir.

Here is the result set.

(1 row(s) affected)

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

(1 row(s) affected)

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

Yerel veya genel geçici tablo oluşturduğunuzda, CREATE TABLE sözdizimi kısıtlama tanımlarında dışında yabancı anahtar kısıtlamaları destekler.Bir yabancı anahtar kısıtlaması geçici belirtilen tablo, kısıtlama bildiren bir uyarı iletisi atlandı deyim döndürür.Tablo, yabancı anahtar kısıtlamaları yine de oluşturulur.Geçici tablolara yabancı anahtar kısıtlamaları başvurulamaz.

Geçici tablolar yerine tablo değişkenlerini kullanmanızı öneririz.Geçici dizinler açıkça üzerinde oluşturulması gerekir veya birden çok saklı yordamlar veya işlevler arasında tablo değerleri görünür olmalı yararlı tablolarıdır.Genellikle, tablo değişkenleri için daha verimli bir sorgu işleme katkıda.Daha fazla bilgi için bkz:Tablo (Transact-SQL).

Bölümlenmiş tablolar

CREATE TABLE'ı kullanarak bölümlenmiş tablo oluşturmadan önce tabloyu bölümlenmiş hale belirtmek için bölümleme işlevi oluşturmalısınız.bölümleme işlevi kullanılarak oluşturulur BÖLÜM FONKSİYONU OLUŞTURMA.Ikinci olarak, bölümler bölüm işlev tarafından belirtilen tutulacağı, dosya gruplarını belirtmek için bir bölümleme düzeni oluşturmanız gerekir.Bir bölümleme düzeni kullanılarak oluşturulur BÖLÜM DÜZENİ OLUŞTURMA.Dosya grupları ayırmak için birincil anahtar veya UNIQUE kısıtlamaları yerleşimini bölümlendirilmiş tablolar için belirtilemez.Daha fazla bilgi için bkz:Bölümlenmiş tablolar ve dizinler.

birincil anahtar kısıtlamaları

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

  • Bir birincil anahtar kısıtlaması tarafından üretilen dizin, üzerinde dizin sayısı neden edemiyor tablo 999 kümelenmemiş dizin ve 1 kümelenmiş dizin aşacak.

  • CLUSTERED veya NONCLUSTERED bir birincil anahtar kısıtlaması için belirtilmezse, UNIQUE kısıtlamaları için belirtilen kümelenmiş dizin varsa, CLUSTERED kullanılır.

  • Bir birincil anahtar kısıtlaması içinde tanımlanmış tüm sütunlar tanımlandığı şekilde bir NOT NULL.null atanabilirlik belirtilen bir birincil anahtar kısıtlaması katılan tüm sütunlar için kendi null atanabilirlik aldıysanız, NOT NULL.

  • Birincil anahtar üzerinde tanımlanmış olması durumunda bir CLR kullanıcı tanımlı türü ikili sıralama sütun, uygulama türü desteklemelidir.Daha fazla bilgi için bkz:CLR kullanıcı tanımlı türler.

UNIQUE kısıtlamaları

  • NONCLUSTERED, CLUSTERED veya NONCLUSTERED bir UNIQUE sınırlamasıyla için belirtilmezse, varsayılan olarak kullanılır.

  • Her UNIQUE sınırlamasıyla bir dizin oluşturur.UNIQUE kısıtlamaları sayısı, üzerinde dizin sayısı neden edemiyor tablo 999 kümelenmemiş dizin ve 1 kümelenmiş dizin aşacak.

  • Bir benzersiz (unique) sınırlaması bir CLR tanımlıysa kullanıcı tanımlı tür sütun, uygulama türü ikili işleç-based sipariş desteklemelidir.Daha fazla bilgi için bkz:CLR kullanıcı tanımlı türler.

yabancı anahtar kısıtlamaları

  • Bir FOREIGN KEY kısıtlaması, sütuna null dışında bir değer girildiğinde, başvurulan sütun değeri olması gerekir; tersi durumda, bir yabancı anahtar ihlali "hata iletisi döndürülür.

  • Kaynak sütun belirtilmedikçe yabancı anahtar kısıtlamaları önceki sütuna uygulanır.

  • yabancı anahtar kısıtlamaları yalnızca aynı sunucuda aynı veritabanındaki tabloları başvuruda bulunabilir.Geçici veritabanı tutarlılığı, Tetikleyiciler uygulanması gerekir.Daha fazla bilgi için bkz:(Transact-SQL) TRIGGER CREATE.

  • yabancı anahtar kısıtlamaları aynı başka bir sütuna başvuruda bulunabilir tablo.Bu başvurusu adlandırılır.

  • BAŞVURULARı yan tümce sütun düzey yabancı anahtar kısıtlama, yalnızca tek bir başvuru sütunu listeleyebilirsiniz.Bu sütun, aynı veri sınırlama tanımlanmış bir sütun olarak türüne sahip olmalıdır.

  • BAŞVURULAR bir tablo düzey yabancı anahtar kısıtlaması yan tümcesinde aynı sayıda başvuru sütunu olarak sütun sayısını sınırlama sütun listesinden olmalıdır.Her Başvuru sütununun veri türü de karşılık gelen sütun sütun listesi ile aynı olmalıdır.

  • CASCADE, küme NULL veya küme DEFAULT belirtilen türde bir sütun, timestamp yabancı anahtar veya başvurulan anahtar'nın bir parçasıdır.

  • CASCADE, küme NULL, küme DEFAULT ve NO eylem birbirleriyle başvurusal ilişkisi olan tablolar birleştirilebilir.If the Database Engine encounters NO eylem, it stops and rolls back related CASCADE, küme NULL and küme DEFAULT actions. küme NULL ve küme DEFAULT eylemleri CASCADE, küme NULL, küme DEFAULT ve NO eylem eylemleri, tüm CASCADE birlikte kullanılan DELETE deyim neden olduğunda önce uygulanan Database Engine hiçbir NO eylem denetler.

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

    Yine de, gerçek sayısı kullanılabilir yabancı anahtar kısıtlamaları uygulama ve veritabanı tasarımını ve donanım yapılandırması tarafından sınırlıdır.Önerilir bir tablo en çok 253 yabancı anahtar kısıtlamaları içeren ve en çok 253 yabancı anahtar kısıtlamaları başvuruyor.Etkin sınırı, daha fazla veya uygulama ve donanım bağlı olabilir.Veritabanı ve uygulamalarınızı tasarlarken yabancı anahtar kısıtlamaları zorlanarak maliyetini dikkate alın.

  • yabancı anahtar kısıtlamaları geçici tabloyu zorlanmaz.

  • yabancı anahtar kısıtlamaları, birincil anahtar veya UNIQUE kısıtlamaları, başvurulan sütunlardaki yalnızca baþvurabilirsiniz tablo veya bir benzersiz dizin başvurulan üzerinde tablo.

  • Yabancı anahtar bir CLR kullanıcı tanımlı türü sütun tanımlıysa, uygulama türü ikili sıralama desteklemelidir.Daha fazla bilgi için bkz:CLR kullanıcı tanımlı türler.

  • Sütun türü varchar(max) yalnızca başvurduğu bir birincil anahtar da türü olarak tanımlıysa bir yabancı anahtar kısıtlamasında yer alabilir varchar(max).

DEFAULT tanımları

  • Bir sütun, yalnızca bir VARSAYıLAN tanımı olabilir.

  • Sabit değerleri, işlevler, SQL-92 giriş giriş parametresiz işlevler veya NULL BIR VARSAYıLAN tanımı içerir.Aşağıdaki tablo giriş giriş parametresiz işlevler ve INSERT deyim sı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.

    current_user

    Bir ekleme işlemi kullanıcının adı.

    session_user

    Bir ekleme işlemi kullanıcının adı.

    system_user

    Bir ekleme işlemi kullanıcının adı.

    KULLANICI

    Bir ekleme işlemi kullanıcının adı.

  • constant_expression bir VARSAYıLAN tablodaki başka sütun veya diğer tablolar, görünümler, başvuruda bulunamaz veya saklı yordamları tanımı.

  • Sütunlarla, VARSAYıLAN tanımları oluşturulamıyor bir timestamp veri türü veya bir IDENTITY özelliğiyle sütunlar.

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

CHECK kısıtlamaları

  • sütun herhangi bir sayıda CHECK kısıtlamaları olabilir ve koşul birlikte birden çok mantıksal ifadeler kullanılabilir AND ve OR.Bir sütun için birden çok CHECK kısıtlamaları, oluşturuldukları sırayla doğrulanır.

  • Arama koşulu bir Boole ifadesi için oluşturmalı ve başka başvuramaz tablo.

  • Bir sütun düzey CHECK kısıtlaması yalnızca kısıtlanmış sütun başvurusu ve bir tablo düzey CHECK kısıtlaması, yalnızca aynı tablodaki sütunları başvurabilirsiniz.

    CHECK KıSıTLAMALARı ve kuralları Ekle ve GÜNCELLEŞTIR deyimleri sırasında veri doğrulama, aynı işlev hizmet.

  • Bir kural ve bir veya daha fazla kısıtlamayı CHECK bir sütun veya sütunları bulunduğunda, tüm kısıtlamalar değerlendirilir.

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

Ek kısıtlama bilgileri

  • Kısıtlama için oluşturulmuş bir dizini DROP ıNDEX'i kullanarak kesilmesine olamaz; ALTER tablo'ı kullanarak kısıtlamayı kesilmesine gerekir.Kullanılarak oluşturulan ve bir kısıtlama kullanılan bir dizin yeniden oluşturulması dbcc dbreindex.

  • Kısıtlama adları kurallarýna gerekir tanımlayıcılardışında adı, numara işareti (#) ile başlayamaz.If constraint_name olan sağlanmayan, sistem tarafından oluşturulan bir ad kısıtlama olarak atanır. Kısıtlama adı kısıtlama ihlalleri hakkında herhangi bir hata iletisi görüntülenir.

  • deyim bir INSERT, UPDATE veya DELETE deyim için bir kısıtlama ihlal edildi, sona erer.küme XACT_ABORT KAPALı olarak ayarlandığında, deyim açık bir hareketin bir parçasıysa, ancak hareket işlenmeye devam eder.küme XACT_ABORT ON olarak ayarlandığında, tüm işlem geri döndürülüyor.ROLLBACK TRANSACTION deyim ile işlem tanımını denetleyerek de kullanılabilir **@@**ERROR sistem işlev.

  • Zaman ALLOW_ROW_LOCKS ON = ve ALLOW_PAGE_LOCK satır-CVE-2006-, sayfa-ON = ve dizin eriştiğinizde, Tablo düzey kilitlerin izin verilir.The Database Engine chooses the appropriate kilit and can escalate the kilit from a row or sayfa kilit to a tablo kilit. Daha fazla bilgi için bkz:Kilit yükseltme (Veritabanı Altyapısı).Zaman ALLOW_ROW_LOCKS = OFF ve ALLOW_PAGE_LOCK = OFF, dizin eriştiğinizde, yalnızca bir tablo düzey kilit izin verilir.Kilitleme taneciklik'dizin için yapılandırma hakkında daha fazla bilgi için bkz: Bir dizin için kilitleme özelleştirme.

  • Bir tablo yabancı anahtar veya CHECK KıSıTLAMALARı ve tetikleyiciler, tetikleyici yürütülmeden önce sınırlama koşulları değerlendirilir.

Özet Grafik raporu için bir tablo ve sütunlarından kullanın. sp_help or sp_helpconstraint.Yeniden adlandırmak için bir tablo, kullanma sp_rename.Özet Grafik raporu için görünümler ve tablo olan saklı yordamlar kullanın. sys.dm_sql_referenced_entities and sys.dm_sql_referencing_entities.

Bir tablo tanımı içinde null atanabilirlik kuralları

null atanabilirlik sütun o sütuna bir null verebilir olup olmadığını belirler, bu sütundaki veriler olarak değer (NULL).NULL sıfır veya boş değil: BOŞ girdi yapıldı veya açık bir NULL sağlanmadı ve genellikle değer bilinmiyor veya geçerli değil olduğunu gösterir anlamına gelir.

tablo, CREATE veya ALTER tablo oluşturmak veya bir tabloyu değiştirmek için kullandığınızda, veritabanı ve oturum ayarları etkileyen ve büyük olasılıkla null atanabilirlik bir sütun tanımı içinde kullanılan bir veri türü geçersiz.Her zaman açıkça da bir sütun BOş olarak tanımlamak veya NOT NULL sütunlarını noncomputed önerilir veya bir kullanıcı tanımlı veri türü kullanıyorsanız, sütunun veri türünün varsayılan null atanabilirlik kullanmasını sağlar.Seyrek sütunlar her zaman NULL izin vermesi gerekir.

Sütun null atanabilirlik açıkça belirtildiği zaman sütun null atanabilirlik aşağıdaki gösterilen kuralları izler. tablo.

Sütun veri türü

Kural

diğer ad ad veri türü

The Database Engine uses the null atanabilirlik that is specified when the data type was created. Veri türünün varsayılan null atanabilirlik belirlemek için kullanın. sp_help.

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

null atanabilirlik sütun tanımının göre belirlenir.

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

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

Ne zaman oturum ayarları küme'i kullanarak AÇıK küme:

  • ANSI_NULL_DFLT_ON ON, ' = NULL atanır.

  • ANSI_NULL_DFLT_OFF = ON, NOT NULL atanır.

  • Herhangi bir veritabanı, ALTER DATABASE kullanarak ayarlar yapılandırılır:

  • ANSI_NULL_DEFAULT_ON ON, ' = NULL atanır.

  • ANSI_NULL_DEFAULT_OFF = ON, NOT NULL atanır.

  • To view the database setting for ANSI_NULL_DEFAULT, use the sys.databases catalog view

ANSI_NULL_DFLT seçeneklerden hiçbiri oturum için küme ve veritabanının varsayılan (ANSI_NULL_DEFAULTis OFF), NOT varsayılan olarak küme NULL atanır.

Sütun, hesaplanan sütun ise, kendi null atanabilirlik her zaman otomatik olarak belirlenir Database Engine. Bu sütun tipini null atanabilirlik ilgili olarak bulmak için , the COLUMNPROPERTY kullanın işlev ile AllowsNull özellik.

Not

Microsoft OLE DB sağlayıcı for SQL Server ANSI_NULL_DFLT_ON ON olarak küme olması için her ikisi de varsayılan 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 uygulama tarafından ayarlanan özelliklerini yapılandırabilirsiniz.

Veri sıkıştırma

Sistem tabloları için sıkıştırma etkin duruma getirilemez.Tablo oluştururken, veri sıkıştırmasını NONE olarak, aksi belirtilmedikçe küme.Disk bölümleri veya aralık dışı bir bölüm listesi belirlerseniz, 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.

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

İzinler

Veritabanındaki CREATE tablo iznine ve tabloyu oluşturulduğu şema ALTER izni gerektirir.

CREATE tablo deyim içinde herhangi bir sütun, CLR kullanıcı tanımlı türü olarak tanımlanır, sahiplik türü ya da bu BAşVURULAR izni gereklidir.

XML şema koleksiyon sahipliğini ya da BAşVURULAR iznine, tüm sütunları CREATE tablo deyim ile ilişkilendirilmiş bir XML şema koleksiyon varsa, gereklidir.

Örnekler

C.birincil anahtar kısıtlamaları'nı kullanma

Aşağıdaki örnek bir birincil anahtar kısıtlaması kümelenmiş bir dizini olan sütun tanımı gösterir EmployeeID sütunu Employee Tablo içinde (kısıtlama adı sağlamak sistem izin verir) AdventureWorks Örnek Veritabanı'nı tıklatın.

EmployeeID int
PRIMARY KEY CLUSTERED

b.yabancı anahtar kısıtlamaları'nı kullanma

Başka bir başvuru için kullanılan BIR yabancı anahtar kısıtlaması tablo.Yabancı anahtarları, tek sütunlu anahtarlarının ya da birden çok sütun anahtarları olabilir.Bu aşağıdaki örnek, bir tek-CVE-2006-sütun FOREIGN gösterir ANAHTAR sınırlaması SalesOrderHeader başvuran tablo SalesPerson Tablo. BAŞVURULAR yan tümce, bir tek-CVE-2006-sütun FOREIGN için gerekli olan yalnızca anahtar kısıtlaması.

SalesPersonID int NULL
REFERENCES SalesPerson(SalesPersonID)

Ayrıca, açıkça yabancı anahtar yan tümce ve sütun özniteliği yazmayı kullanabilirsiniz.Not sütun adı her iki tablonun aynı olmak zorunda değildir.

FOREIGN KEY (SalesPersonID) REFERENCES SalesPerson(SalesPersonID)

Birden çok sütun anahtar kısıtlamaları, tablo kısıtlamaları olarak oluşturulur.Içinde AdventureWorks Veritabanı, SpecialOfferProduct Tablo birden çok sütun bir birincil anahtar içerir. Aşağıdaki örnekte, bu anahtar, başka başvuracak biçimde gösterilmiştir tablo; bir açık kısıtlama adı seçime bağlıdır.

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

c.UNIQUE kısıtlamaları'nı kullanma

UNIQUE kısıtlamaları, nonprimary anahtar sütunlarının benzersizlik için kullanılır.Aşağıdaki örnek bir kısıtlama uygular, Name sütun Product tablo benzersiz olması gerekir.

Name nvarchar(100) NOT NULL
UNIQUE NONCLUSTERED

d.DEFAULT tanımlarını kullanma

Varsayılan bir değerle (Ekle ve GÜNCELLEŞTIR deyimleri) girmeniz hiçbir değer zaman sağlanır.Örneğin, AdventureWorks Veritabanı arama içerebilir tablo farklı işlere çalışanları listeleniyor şirkette doldurabilirsiniz. Gerçek bir açıklama açıkça girilmezse, her iş tanımlayan sütun altında bir karakter dizesi varsayılan bir açıklama sağlamanız.

DEFAULT 'New Position - title not formalized yet'

Sabitler ek olarak, VARSAYıLAN tanımları işlevler ekleyebilirsiniz.Aşağıdaki örnek, geçerli bir tarih girişi için almak için kullanın.

DEFAULT (getdate())

Parametresiz işlev tarama, veri bütünlüğü de geliştirebilir.Bir satır eklenen kullanıcı izlemek için , KULLANıCı için parametresiz işlevini kullanın.Parantezli parametresiz işlevler) almayın.

DEFAULT USER

e.CHECK kısıtlamaları'nı kullanma

Aşağıdaki örnek olarak girilen değer için yapılan bir kısıtlama gösterir CreditRating sütun Vendor Tablo. Adsız sınırlamadır.

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

Bu örnek, bir tablonun bir sütununa girilen karakter veri üzerinde bir adlandırılmış bir deseni kısıtlama 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 bir tablo tanımını gösterme

Aşağıdaki örnek, tüm kısıtlama tablo tanımları ile tam bir tablo tanımı gösterir. PurchaseOrderDetail oluşturulan AdventureWorks Veritabanı. Örnek çalıştırmak için , Tablo şeması için değiştiğinde, not alın. dbo.

g.Bir xml'ile tablo oluşturma sütun bir XML şeması derlemesine yazdınız.

Aşağıdaki örnek, bir tablo oluşturur bir xml XML şema koleksiyon için yazılan sütun HRResumeSchemaCollection. The DOCUMENT keyword specifies that each örnek of the xml data type in column_name can contain only one top-düzey element.

h.bölümlenmiş tablo oluşturma

Aşağıdaki örnek, bir tablo ya da dizin dört bölüme bölüm için bölüm işlev oluşturur.Örneğin, daha sonra dosya gruplarını ', dört bölüm her tutulacağı belirten bir bölümleme düzeni oluşturur.Son olarak, bu örnek bölümleme şemasını kullanan bir tablo oluşturur.Bu örnek, veritabanında zaten dosya gruplarını varsayar.

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

Based on the values of sütun col1 of PartitionTable, the partitions are assigned in the following ways.

Dosya grubu

test1fg

test2fg

test3fg

test4fg

Partition

1

2

3

4

Values

Col 1 <= 1

col1 > 1 AND col1 <= 100

col1 > 100 AND col1 <= 1,000

col1 > 1000

İ.The uniqueidentifier kullanarak, veri türü bir sütun

Aşağıdaki örnek, bir tablo oluşturur bir uniqueidentifier sütun. Örnek bir birincil anahtar kısıtlaması tabloda yinelenen değerleri ekleme, kullanıcılara karşı korumak için kullanır ve kullandığı NEWSEQUENTIALID() ' de işlev DEFAULT yeni satırlar için değerleri sağlamak için kısıtlaması'ı tıklatın. ROWGUIDCOL özellik uygulandığı uniqueidentifier sütun; bu nedenle, bu BT $ ROWGUID anahtar sözcüğünü kullanarak başvurulabilir.

j.hesaplanan sütun için bir ifade kullanma

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

k.kullanıcı tanımlı tür sütunda hesaplanan sütun oluşturma

Aşağıdaki örnek, kullanıcı tanımlı tür olarak tanımlanmış bir sütun içeren bir tablo oluşturur. utf8string, varsayarak türü'nın derleme ve tür, geçerli veritabanında zaten oluşturulmuş. 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.hesaplanan sütun için USER_NAME işlevini kullanma

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

m.Bir tablo oluşturma FILESTREAM sütun vardır.

Aşağıdaki örnek, var olan bir tablo oluşturur bir FILESTREAM sütun Photo. Bir veya daha fazla tablo varsa FILESTREAM sütun, tabloda 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()
    )

n.Bir tablo oluşturma satır sıkıştırma kullanır...

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

CREATE TABLE 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.

o.Seyrek sütun ve küme bir sütuna sahip bir tablo oluşturma

Aşağıdaki örnekler, seyrek bir sütunu olan bir tabloyu ve iki sparse sütun ve küme bir sütuna sahip olan bir tablo oluşturmak nasıl gösterir.Örnekler, temel bir sözdizimi kullanın.Daha karmaşık bir örnek için bkz: Seyrek sütunları kullanma ve Sütun kümesi'ni kullanma.

Seyrek bir sütun içeren bir tablo oluşturmak için yürütmek aşağıdaki kodu.

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

Iki sparse sütun ve küme bir sütuna sahip olan bir tablo oluşturmak için CSet, aşağıdaki kod yürütebilir.

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