Aracılığıyla paylaş


CREATE TABLE (Transact-SQL)

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıMicrosoft Fabric'de Azure SQL Yönetilen ÖrneğiSQL veritabanı

Veritabanında yeni bir tablo oluşturur.

Uyarı

Microsoft Fabric'te Ambar başvurusu için CREATE TABLE (Doku Veri Ambarı) adresini ziyaret edin. Azure Synapse Analytics ve Analytics Platform Sistemi'ne (PDW) başvurmak için CREATE TABLE (Azure Synapse Analytics) adresini ziyaret edin.

Transact-SQL söz dizimi kuralları

Söz dizimi seçenekleri

Ortak söz dizimi

Basit CREATE TABLE söz dizimi (seçenekler kullanılmıyorsa yaygın):

CREATE TABLE
    { database_name.schema_name.table_name | schema_name.table_name | table_name }
    ( { <column_definition> } [ ,... n ] )
[ ; ]

Tam söz dizimi

Disk tabanlı CREATE TABLE söz dizimi:

CREATE TABLE
    { database_name.schema_name.table_name | schema_name.table_name | table_name }
    [ AS FileTable ]
    ( { <column_definition>
        | <computed_column_definition>
        | <column_set_definition>
        | [ <table_constraint> ] [ ,... n ]
        | [ <table_index> ] }
          [ ,... n ]
          [ PERIOD FOR SYSTEM_TIME ( system_start_time_column_name
             , system_end_time_column_name ) ]
      )
    [ 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 ]
    [ MASKED WITH ( FUNCTION = 'mask_function' ) ]
    [ [ CONSTRAINT constraint_name ] DEFAULT constant_expression ]
    [ IDENTITY [ ( seed , increment ) ] ]
    [ NOT FOR REPLICATION ]
    [ GENERATED ALWAYS AS { ROW | TRANSACTION_ID | SEQUENCE_NUMBER } { START | END } [ HIDDEN ] ]
    [ [ CONSTRAINT constraint_name ] {NULL | NOT NULL} ]
    [ ROWGUIDCOL ]
    [ ENCRYPTED WITH
        ( COLUMN_ENCRYPTION_KEY = key_name ,
          ENCRYPTION_TYPE = { DETERMINISTIC | RANDOMIZED } ,
          ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256'
        ) ]
    [ <column_constraint> [ ,... n ] ]
    [ <column_index> ]

<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 ]
        [ ( <column_name> [ ,... n ] ) ]
        [
            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 )
}

<column_index> ::=
 INDEX index_name [ CLUSTERED | NONCLUSTERED ]
    [ WITH ( <index_option> [ ,... n ] ) ]
    [ ON { partition_scheme_name ( column_name )
         | filegroup_name
         | default
         }
    ]
    [ FILESTREAM_ON { filestream_filegroup_name | partition_scheme_name | "NULL" } ]

<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 ] )
        ]
        [ ON { partition_scheme_name ( partition_column_name )
        | filegroup | "default" } ]

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

<column_set_definition> ::=
column_set_name XML COLUMN_SET FOR ALL_SPARSE_COLUMNS

<table_constraint> ::=
[ CONSTRAINT constraint_name ]
{
    { PRIMARY KEY | UNIQUE }
        [ CLUSTERED | NONCLUSTERED ]
        ( column_name [ ASC | DESC ] [ ,... n ] )
        [
            WITH FILLFACTOR = fillfactor
           | WITH ( <index_option> [ ,... n ] )
        ]
        [ ON { partition_scheme_name (partition_column_name)
            | filegroup | "default" } ]
    | FOREIGN KEY
        ( column_name [ ,... 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_index> ::=
{
    {
      INDEX index_name [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ]
         ( column_name [ ASC | DESC ] [ ,... n ] )
    | INDEX index_name CLUSTERED COLUMNSTORE [ ORDER (column_name [ , ...n ] ) ]
    | INDEX index_name [ NONCLUSTERED ] COLUMNSTORE ( column_name [ ,... n ] )
    }
    [ INCLUDE ( column_name [ ,... n ] ) ]
    [ WHERE <filter_predicate> ]
    [ WITH ( <index_option> [ ,... n ] ) ]
    [ ON { partition_scheme_name ( column_name )
         | filegroup_name
         | default
         }
    ]
    [ FILESTREAM_ON { filestream_filegroup_name | partition_scheme_name | "NULL" } ]
}

<table_option> ::=
{
    [ DATA_COMPRESSION = { NONE | ROW | PAGE }
      [ ON PARTITIONS ( { <partition_number_expression> | <range> }
      [ ,... n ] ) ] ]
    [ XML_COMPRESSION = { ON | OFF }
      [ ON PARTITIONS ( { <partition_number_expression> | <range> }
      [ ,... n ] ) ] ]
    [ FILETABLE_DIRECTORY = <directory_name> ]
    [ FILETABLE_COLLATE_FILENAME = { <collation_name> | database_default } ]
    [ FILETABLE_PRIMARY_KEY_CONSTRAINT_NAME = <constraint_name> ]
    [ FILETABLE_STREAMID_UNIQUE_CONSTRAINT_NAME = <constraint_name> ]
    [ FILETABLE_FULLPATH_UNIQUE_CONSTRAINT_NAME = <constraint_name> ]
    [ SYSTEM_VERSIONING = ON
        [ ( HISTORY_TABLE = schema_name.history_table_name
          [ , DATA_CONSISTENCY_CHECK = { ON | OFF } ]
    ) ]
    ]
    [ REMOTE_DATA_ARCHIVE =
      {
        ON [ ( <table_stretch_options> [ ,... n] ) ]
        | OFF ( MIGRATION_STATE = PAUSED )
      }
    ]
    [ DATA_DELETION = ON
          { (
             FILTER_COLUMN = column_name,
             RETENTION_PERIOD = { INFINITE | number { DAY | DAYS | WEEK | WEEKS
                              | MONTH | MONTHS | YEAR | YEARS } }
        ) }
    ]
    [ LEDGER = ON [ ( <ledger_option> [ ,... n ] ) ]
    | OFF
    ]
}

<ledger_option>::=
{
    [ LEDGER_VIEW = schema_name.ledger_view_name [ ( <ledger_view_option> [ ,... n ] ) ] ]
    [ APPEND_ONLY = ON | OFF ]
}

<ledger_view_option>::=
{
    [ TRANSACTION_ID_COLUMN_NAME = transaction_id_column_name ]
    [ SEQUENCE_NUMBER_COLUMN_NAME = sequence_number_column_name ]
    [ OPERATION_TYPE_COLUMN_NAME = operation_type_id column_name ]
    [ OPERATION_TYPE_DESC_COLUMN_NAME = operation_type_desc_column_name ]
}

<table_stretch_options> ::=
{
    [ FILTER_PREDICATE = { NULL | table_predicate_function } , ]
      MIGRATION_STATE = { OUTBOUND | INBOUND | PAUSED }
 }

<index_option> ::=
{
    PAD_INDEX = { ON | OFF }
  | FILLFACTOR = fillfactor
  | IGNORE_DUP_KEY = { ON | OFF }
  | STATISTICS_NORECOMPUTE = { ON | OFF }
  | STATISTICS_INCREMENTAL = { ON | OFF }
  | ALLOW_ROW_LOCKS = { ON | OFF }
  | ALLOW_PAGE_LOCKS = { ON | OFF }
  | OPTIMIZE_FOR_SEQUENTIAL_KEY = { ON | OFF }
  | COMPRESSION_DELAY = { 0 | delay [ Minutes ] }
  | DATA_COMPRESSION = { NONE | ROW | PAGE | COLUMNSTORE | COLUMNSTORE_ARCHIVE }
       [ ON PARTITIONS ( { partition_number_expression | <range> }
       [ ,... n ] ) ]
  | XML_COMPRESSION = { ON | OFF }
      [ ON PARTITIONS ( { <partition_number_expression> | <range> }
      [ ,... n ] ) ]
}

<range> ::=
<partition_number_expression> TO <partition_number_expression>

Bellek için iyileştirilmiş tablolar için söz dizimi

Bellek için iyileştirilmiş CREATE TABLE söz dizimi:

CREATE TABLE
    { database_name.schema_name.table_name | schema_name.table_name | table_name }
    ( { <column_definition>
    | [ <table_constraint> ] [ ,... n ]
    | [ <table_index> ]
      [ ,... n ] }
      [ PERIOD FOR SYSTEM_TIME ( system_start_time_column_name
        , system_end_time_column_name ) ]
)
    [ WITH ( <table_option> [ ,... n ] ) ]
 [ ; ]

<column_definition> ::=
column_name <data_type>
    [ COLLATE collation_name ]
    [ GENERATED ALWAYS AS ROW { START | END } [ HIDDEN ] ]
    [ NULL | NOT NULL ]
    [ [ CONSTRAINT constraint_name ] DEFAULT memory_optimized_constant_expression ]
    | [ IDENTITY [ ( 1, 1 ) ] ]
    [ <column_constraint> ]
    [ <column_index> ]

<data_type> ::=
 [type_schema_name. ] type_name [ (precision [ , scale ]) ]

<column_constraint> ::=
 [ CONSTRAINT constraint_name ]
{
  { PRIMARY KEY | UNIQUE }
      { NONCLUSTERED
        | NONCLUSTERED HASH WITH ( BUCKET_COUNT = bucket_count )
      }
  [ ( <column_name> [ ,... n ] ) ]
  | [ FOREIGN KEY ]
        REFERENCES [ schema_name. ] referenced_table_name [ ( ref_column ) ]
  | CHECK ( logical_expression )
}

<table_constraint> ::=
 [ CONSTRAINT constraint_name ]
{
   { PRIMARY KEY | UNIQUE }
     {
       NONCLUSTERED ( column_name [ ASC | DESC ] [ ,... n ])
       | NONCLUSTERED HASH ( column_name [ ,... n ] ) WITH ( BUCKET_COUNT = bucket_count )
                    }
    | FOREIGN KEY
        ( column_name [ ,... n ] )
        REFERENCES referenced_table_name [ ( ref_column [ ,... n ] ) ]
    | CHECK ( logical_expression )
}

<column_index> ::=
  INDEX index_name
{ [ NONCLUSTERED ] | [ NONCLUSTERED ] HASH WITH ( BUCKET_COUNT = bucket_count ) }

<table_index> ::=
  INDEX index_name
{   [ NONCLUSTERED ] HASH ( column_name [ ,... n ] ) WITH ( BUCKET_COUNT = bucket_count )
  | [ NONCLUSTERED ] ( column_name [ ASC | DESC ] [ ,... n ] )
      [ ON filegroup_name | default ]
  | CLUSTERED COLUMNSTORE [ WITH ( COMPRESSION_DELAY = { 0 | delay [ Minutes ] } ) ]
      [ ON filegroup_name | default ]

}

<table_option> ::=
{
    MEMORY_OPTIMIZED = ON
  | DURABILITY = { SCHEMA_ONLY | SCHEMA_AND_DATA }
  | SYSTEM_VERSIONING = ON [ ( HISTORY_TABLE = schema_name.history_table_name
        [, DATA_CONSISTENCY_CHECK = { ON | OFF } ] ) ]

}

Tartışmalar

database_name

Tablonun oluşturulduğu veritabanının adı. database_name mevcut veritabanının adını belirtmelidir. Belirtilmezse , database_name varsayılan olarak geçerli veritabanını kullanır. Geçerli bağlantının oturum açma bilgileri , database_name tarafından belirtilen veritabanındaki mevcut bir kullanıcı kimliğiyle ilişkilendirilmelidir ve bu kullanıcı kimliğinin CREATE TABLE izinleri olmalıdır.

schema_name

Yeni tablonun ait olduğu şemanın adı.

table_name

Yeni tablonun adı. Tablo adları tanımlayıcıları için kurallara uymalıdır. table_name , 116 karakteri geçemeyecek yerel geçici tablo adları (tek sayı işareti (#)ile önekli adlar) dışında en fazla 128 karakter olabilir.

AS FileTable

için geçerlidir: SQL Server 2012 (11.x) ve üzeri.

Yeni tabloyu FileTable olarak oluşturur. FileTable'ın sabit bir şeması olduğundan sütunları belirtemezsiniz. Daha fazla bilgi için bkz. FileTables.

column_name AS computed_column_expression

Hesaplanan sütunun değerini tanımlayan ifade. Hesaplanan sütun, sütun PERSISTED olarak işaretlenmediği sürece fiziksel olarak tabloda depolanmayan bir sanal sütundur. Sütun, aynı tablodaki diğer sütunları kullanan bir ifadeden hesaplanır. Örneğin, hesaplanan sütun tanımına sahip olabilir: cost AS price * qty. İfade, birleştirilmemiş bir sütun adı, sabit, işlev, değişken ve bunların bir veya daha fazla işleçle bağlanmış herhangi bir bileşimi olabilir. İfade bir alt sorgu olamaz veya diğer ad veri türleri içeremez.

Hesaplanan sütunlar aşağıdaki özel durumlar dışında seçim listelerinde, WHERE yan tümcelerinde, ORDER BY yan tümcelerinde veya normal ifadelerin kullanılabildiği diğer konumlarda kullanılabilir:

  • Yabancı ANAHTAR veya CHECK kısıtlamasına katılmak için hesaplanan sütunların PERSISTED olarak işaretlenmesi gerekir.

  • Hesaplanan sütun değeri belirlenimci bir ifade tarafından tanımlanıyorsa ve sonucun veri türüne dizin sütunlarında izin veriliyorsa, hesaplanan sütun bir dizinde anahtar sütunu olarak veya bİrİnCİl ANAHTAR veya BENZERSİz kısıtlamasının bir parçası olarak kullanılabilir.

    Örneğin, tabloda ve atamsayı sütunları b varsa, hesaplanan sütun a + b dizine alınmış olabilir, ancak hesaplanan sütun a + DATEPART(dd, GETDATE()) dizine alınamaz çünkü sonraki çağrılarda değer değişebilir.

  • Hesaplanan sütun, INSERT veya UPDATE deyiminin hedefi olamaz.

Uyarı

Tablodaki her satır, hesaplanan sütunda yer alan sütunlar için farklı değerlere sahip olabilir; bu nedenle, hesaplanan sütun her satır için aynı değere sahip olmayabilir.

Kullanılan ifadelere bağlı olarak, hesaplanan sütunların null atanabilirliği Veritabanı Altyapısı tarafından otomatik olarak belirlenir. Çoğu ifadenin sonucu, yalnızca geçersiz olmayan sütunlar mevcut olsa bile null olarak kabul edilir, çünkü olası taşmalar veya taşmalar da NULL sonuçlar üretir. Bir tablodaki COLUMNPROPERTY hesaplanan herhangi bir sütunun null atanabilirliğini araştırmak için AllowsNull özelliğiyle işlevini kullanın. Null atanabilir bir ifade, ISNULL sabiti ile belirtilerek, null değer atanamaz bir ifadeye dönüştürülebilir. Burada sabit, null sonucun yerini alan bir geçersiz değerdir. Ortak dil çalışma zamanı (CLR) kullanıcı tanımlı tür ifadelerine göre hesaplanan sütunlar için türdeki BAŞVURUlar izni gereklidir.

KALICI

SQL Server Veritabanı Altyapısı'nın hesaplanan değerleri tabloda fiziksel olarak depolayacak ve hesaplanan sütunun bağımlı olduğu diğer sütunlar güncelleştirildiğinde değerleri güncelleştireceğini belirtir. Hesaplanan sütunu olarak PERSISTED işaretlemek, hesaplanan bir sütunda kesin olmayan ama kesin olmayan bir dizin oluşturmanıza olanak tanır. Daha fazla bilgi için bkz.Hesaplanan Sütunlarda Dizinler . Bölümlenmiş tablonun bölümleme sütunları olarak kullanılan tüm hesaplanan sütunlar açıkça işaretlenmelidir PERSISTED. computed_column_expression belirtildiğinde PERSISTED belirleyici olmalıdır.

ON { partition_scheme | dosya grubu | "default" }

Tablonun depolandığı bölüm düzenini veya dosya grubunu belirtir. partition_scheme belirtilirse, tablo bölümleri partition_scheme'de belirtilen bir veya daha fazla dosya grubu kümesinde depolanan bölümlenmiş bir tablodur. Dosya grubu belirtilirse, tablo adlandırılmış dosya grubunda depolanır. Dosya grubu veritabanında mevcut olmalıdır. Belirtilirse "default" veya AÇICI belirtilmezse, tablo varsayılan dosya grubunda depolanır. CREATE TABLE'da belirtilen tablonun depolama mekanizması daha sonra değiştirilemez.

ON { partition_scheme | dosya grubu | "default" } bir BİRİnCİl ANAHTAR veya BENZERSİz kısıtlamasında da belirtilebilir. Bu kısıtlamalar dizinler oluşturur. Dosya grubu belirtilirse, dizin adlandırılmış dosya grubunda depolanır. belirtilirse "default" veya AÇICI belirtilmezse, dizin tabloyla aynı dosya grubunda depolanır. BİRİnCİl ANAHTAR veya BENZERSİz kısıtlaması kümelenmiş bir dizin oluşturursa, tablonun veri sayfaları dizinle aynı dosya grubunda depolanır. belirtilirse veya kısıtlama aksi takdirde kümelenmiş bir dizin oluşturursa ve tablo tanımının CLUSTERED veya dosya grubundan farklı bir partition_scheme belirtilirse (veya tersi), yalnızca kısıtlama tanımı yerine getirilir ve diğeri yoksayılır.

Uyarı

Bu bağlamda , varsayılan bir anahtar sözcük değildir. Varsayılan dosya grubu için bir tanımlayıcıdır ve ON "default" veya ON [default]gibi sınırlandırılmalıdır. Belirtilirse "default" , seçeneğin QUOTED_IDENTIFIER geçerli oturum için ON olması gerekir. Bu varsayılan ayardır. Daha fazla bilgi için bkz. SET QUOTED_IDENTIFIER.

Bölümlenmiş bir tablo oluşturduktan sonra, tablonun seçeneğini olarak LOCK_ESCALATIONayarlamayı AUTO göz önünde bulundurun. Bu, kilitlerin tablo yerine bölüm (HoBT) düzeyine yükseltmesini etkinleştirerek eşzamanlılığı geliştirebilir. Daha fazla bilgi için bkz. ALTER TABLE.

TEXTIMAGE_ON { filegroup | "default" }

Metin, ntext, görüntü, xml, varchar(max), nvarchar(max), varbinary(max)ve CLR kullanıcı tanımlı tür sütunlarının (geometri ve coğrafya dahil) belirtilen dosya grubunda depolandığını gösterir.

TEXTIMAGE_ON tabloda büyük değer sütunları yoksa izin verilmez. TEXTIMAGE_ON partition_scheme belirtilirse belirtilemiyor. belirtilirse "default" veya belirtilmezse TEXTIMAGE_ON , büyük değer sütunları varsayılan dosya grubunda depolanır. içinde CREATE TABLE belirtilen büyük değerli sütun verilerinin depolanması daha sonra değiştirilemez.

Uyarı

varchar(max), nvarchar(max), varbinary(max), xml ve büyük UDT değerleri doğrudan veri satırında, 8.000 bayt sınırına kadar ve değer kayda sığabildiği sürece depolanır. Değer kayda sığmazsa, bir işaretçi satır içinde depolanır ve geri kalanı LOB depolama alanında satır dışında depolanır. 0, tüm değerlerin doğrudan veri satırında depolandığını gösteren varsayılan değerdir.

TEXTIMAGE_ON yalnızca "LOB depolama alanının" konumunu değiştirir, veriler satır içinde depolandığında etkilemez. LoB değerinin tamamını satır dışında depolamak için büyük değer türlerini satırın dışında seçeneğini sp_tableoption kullanın.

Bu bağlamda , varsayılan bir anahtar sözcük değildir. Varsayılan dosya grubu için bir tanımlayıcıdır ve TEXTIMAGE_ON "default" veya TEXTIMAGE_ON [default]gibi sınırlandırılmalıdır. Belirtilirse "default" , seçeneğin QUOTED_IDENTIFIER geçerli oturum için ON olması gerekir. Bu varsayılan ayardır. Daha fazla bilgi için bkz. SET QUOTED_IDENTIFIER.

FILESTREAM_ON { partition_scheme_name | dosya grubu | "default" }

Şunlar için geçerlidir: SQL Server 2008 R2 (10.50.x) ve üzeri. Azure SQL Veritabanı ve Azure SQL Yönetilen Örneği desteklemez FILESTREAM.

FILESTREAM verileri için dosya grubunu belirtir.

Tablo FILESTREAM verileri içeriyorsa ve tablo bölümlenmişse, FILESTREAM_ON yan tümcesi eklenmelidir ve FILESTREAM dosya gruplarının bölüm şemasını belirtmelidir. Bu bölüm düzeni, tablo için bölüm düzeniyle aynı bölüm işlevini ve bölüm sütunlarını kullanmalıdır; aksi takdirde bir hata oluşur.

Tablo bölümlenmemişse FILESTREAM sütunu bölümlenemez. Tablonun FILESTREAM verileri tek bir dosya grubunda depolanmalıdır. Bu dosya grubu FILESTREAM_ON yan tümcesinde belirtilir.

Tablo bölümlenmemişse ve FILESTREAM_ON yan tümcesi belirtilmemişse, özellik kümesine DEFAULT sahip FILESTREAM dosya grubu kullanılır. FILESTREAM dosya grubu yoksa bir hata oluşur.

ON ve TEXTIMAGE_ONgibi, için kullanılarak CREATE TABLEFILESTREAM_ON ayarlanan değer, aşağıdaki durumlar dışında değiştirilemez:

  • CREATE INDEX deyimi bir yığını kümelenmiş dizine dönüştürür. Bu durumda farklı bir FILESTREAM dosya grubu, bölüm düzeni veya NULL belirtilebilir.
  • DROP INDEX deyimi, kümelenmiş dizini yığına dönüştürür. Bu durumda, farklı bir FILESTREAM dosya grubu, bölüm düzeni veya "default" belirtilebilir.

Yan tümcesindeki FILESTREAM_ON <filegroup> dosya grubu veya bölüm düzeninde adı geçen her FILESTREAM dosya grubu, dosya grubu için tanımlanmış bir dosyaya sahip olmalıdır. Bu dosya CREATE DATABASE veya ALTER DATABASE deyimi kullanılarak tanımlanmalıdır; aksi takdirde bir hata oluşur.

İlgili FILESTREAM makaleleri için bkz. İkili Büyük Nesne - Blob Verileri.

[ type_schema_name. ] type_name

Sütunun veri türünü ve ait olduğu şemayı belirtir. Disk tabanlı tablolar için aşağıdaki veri türlerinden birini kullanın:

  • Sistem veri türü
  • SQL Server sistem veri türünü temel alan diğer ad türü. Diğer ad veri türleri, tablo tanımında CREATE TYPE kullanılmadan önce deyimiyle oluşturulur. Diğer ad veri türü için NULL veya NOT NULL ataması CREATE TABLE deyimi sırasında geçersiz kılınabilir. Ancak uzunluk belirtimi değiştirilemez; diğer ad veri türünün uzunluğu deyiminde CREATE TABLE belirtilemiyor.
  • CLR kullanıcı tanımlı türü. CLR kullanıcı tanımlı türler, tablo tanımında CREATE TYPE kullanılmadan önce deyimiyle oluşturulur. CLR kullanıcı tanımlı türünde bir sütun oluşturmak için, tür üzerinde BAŞVURULAR izni gerekir.

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

  • SQL Server sistem veri türü.
  • Geçerli veritabanındaki geçerli kullanıcının varsayılan şeması.
  • Geçerli veritabanındaki dbo şeması.

Bellek için iyileştirilmiş tablolar için desteklenen sistem türlerinin listesi için bkz. In-Memory OLTP için Desteklenen Veri Türleri.

  • duyarlık

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

  • ölçeklendirme

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

  • maksimum

    Yalnızca 2^31 bayt karakter ve ikili veri depolamak için varchar, nvarchar ve varbinary veri türlerine ve 2^30 bayt Unicode verisine uygulanır.

İÇERİK

column_namexml veri türünün her örneğinin birden çok üst düzey öğe içerebileceğini belirtir. İçERİk yalnızca xml veri türü için geçerlidir ve yalnızca xml_schema_collection de belirtildiğinde belirtilebilir. Belirtilmezse, content varsayılan davranıştır.

BELGE

column_namexml veri türünün her örneğinin yalnızca bir üst düzey öğe içerebileceğini belirtir. DOCUMENT yalnızca xml veri türü için geçerlidir ve yalnızca xml_schema_collection de belirtilmişse belirtilebilir.

xml_schema_collection

Yalnızca xml şema koleksiyonunu türle ilişkilendirmek için xml veri türü için geçerlidir. Şemaya xml sütunu yazmadan önce şemanın veritabanında CREATE XML SCHEMA COLLECTION kullanılarak oluşturulması gerekir.

Varsayılan

Ekleme sırasında açıkça bir değer sağlanmayan sütun için sağlanan değeri belirtir. DEFAULT tanımları, zaman damgası olarak tanımlananlar veya özelliğine sahip olanlar dışında herhangi bir sütuna IDENTITY uygulanabilir. Kullanıcı tanımlı tür sütunu için varsayılan bir değer belirtilirse, tür constant_expression kullanıcı tanımlı türe örtük dönüştürmeyi desteklemelidir. Tablo bırakıldığında DEFAULT tanımları kaldırılır. Karakter dizesi gibi yalnızca sabit bir değer; skaler işlev (sistem, kullanıcı tanımlı veya CLR işlevi); veya NULL varsayılan olarak kullanılabilir. SQL Server'ın önceki sürümleriyle uyumluluğu korumak için default öğesine bir kısıtlama adı atanabilir.

  • constant_expression

    Sabit, NULL veya sütun için varsayılan değer olarak kullanılan bir sistem işlevi.

  • memory_optimized_constant_expression

    içinde desteklenen bir sabit, NULL veya bir sistem işlevi, sütun için varsayılan değer olarak kullanılır. Yerel olarak derlenmiş saklı yordamlarda desteklenmelidir. Yerel olarak derlenmiş saklı yordamlardaki yerleşik işlevler hakkında daha fazla bilgi için bkz. Yerel Olarak Derlenmiş T-SQL Modülleri için Desteklenen Özellikler.

KİMLİK

Yeni sütunun bir kimlik sütunu olduğunu gösterir. Tabloya yeni bir satır eklendiğinde, Veritabanı Altyapısı sütun için benzersiz, artımlı bir değer sağlar. Kimlik sütunları genellikle birincil anahtar kısıtlamalarıyla birlikte tablonun benzersiz satır tanımlayıcısı olarak kullanılır. IDENTITY özelliği tinyint, smallint, int, bigint, decimal(p, 0) veya sayısal(p, 0) sütunlara atanabilir. Tablo başına yalnızca bir kimlik sütunu oluşturulabilir. İlişkili varsayılanlar ve DEFAULT kısıtlamaları bir kimlik sütunuyla kullanılamaz. Hem tohum hem de artış veya hiçbiri belirtilmelidir. Hiçbiri belirtilmezse, varsayılan değer (1,1) olur.

  • tohum

    Tabloya yüklenen ilk satır için kullanılan değer.

  • artım

    Yüklenen önceki satırın kimlik değerine eklenen artımlı değer.

ÇOĞALTMA IÇIN DEĞIL

deyiminde CREATE TABLENOT FOR REPLICATION IDENTITY özelliği, FOREIGN KEY kısıtlamaları ve CHECK kısıtlamaları için yan tümcesi belirtilebilir. Özellik için IDENTITY bu yan tümce belirtilirse, çoğaltma aracıları eklemeler gerçekleştirdiğinde kimlik sütunlarında değerler artırılamaz. Bu yan tümce bir kısıtlama için belirtilirse, çoğaltma aracıları ekleme, güncelleştirme veya silme işlemleri gerçekleştirdiğinde kısıtlama uygulanmaz.

ALWAYS AS { ROW | OLARAK OLUŞTURULDU TRANSACTION_ID | SEQUENCE_NUMBER } { START | END } [ HIDDEN ] [ NOT NULL ]

Şunlar için geçerlidir: SQL Server 2016 (13.x) ve üzeri, Azure SQL Veritabanı ve Azure SQL Yönetilen Örneği.

Sistem tarafından tablodaki ve geçmiş tablosundaki satır sürümleriyle ilgili bilgileri otomatik olarak kaydetmek için kullanılan bir sütunu belirtir (tablo sistem sürümüne sahipse ve geçmiş tablosuna sahipse). Sistem sürümüne sahip tablolar oluşturmak için parametresiyle WITH SYSTEM_VERSIONING = ON bu bağımsız değişkeni kullanın: zamansal veya kayıt defteri tabloları. Daha fazla bilgi için bkz. Güncelleştirilebilir kayıt defteri tabloları ve zamana bağlı tablolar.

Parametre Gerekli veri türü Gerekli null atanabilirlik Açıklama
Sıra datetime2 BAŞLAMAK: NOT NULL
SON: NOT NULL
Satır sürümünün geçerli olduğu başlangıç saati (START) veya satır sürümünün geçerli olduğu bitiş saati (END). Zamansal tablo oluşturmak için bu bağımsız değişkeni bağımsız değişkenle PERIOD FOR SYSTEM_TIME birlikte kullanın.
TRANSACTION_ID bigint BAŞLAMAK: NOT NULL
SON: NULL
Şunlar için geçerlidir: SQL Server 2022 (16.x) ve üzeri ile Azure SQL Veritabanı.

Satır sürümünü oluşturan (START) veya geçersiz (END) işlemi kimliği. Tablo bir kayıt defteri tablosuysa, kimlik sys.database_ledger_transactions görünümünde bir satıra başvurur
SEQUENCE_NUMBER bigint BAŞLAMAK: NOT NULL
SON: NULL
Şunlar için geçerlidir: SQL Server 2022 (16.x) ve üzeri ile Azure SQL Veritabanı.

Satır sürümü oluşturan (START) veya silip (END) işlemi sıra numarası. Bu değer işlem içinde benzersizdir.

Yukarıdaki veri türünü veya null atanabilirlik gereksinimlerini karşılamayan bir sütun belirtmeye çalışırsanız sistem bir hata oluşturur. Null atanabilirliği açıkça belirtmezseniz, sistem sütunu yukarıdaki gereksinimlere göre veya NULL olarak NOT NULL tanımlar.

Bu sütunları örtük olarak gizlemek ve bu sütunlar için değer döndürmemek için nokta sütunlarından HIDDEN birini veya her ikisini de bayrakla SELECT * FROM <table> işaretleyebilirsiniz. Varsayılan olarak nokta sütunları gizli değildir. Kullanılabilmesi için, gizli sütunların doğrudan zamana bağlı tabloya başvuran tüm sorgulara açıkça dahil edilmesi gerekir. Mevcut bir dönem sütununun özniteliğini HIDDEN değiştirmek için, PERIOD farklı bir gizli bayrakla bırakılmalı ve yeniden oluşturulmalıdır.

INDEX index_name [ CLUSTERED | NONCLUSTERED ] ( column_name [ ASC | DESC ] [ ,... n ] )

Şunlar için geçerlidir: SQL Server 2014 (12.x) ve üzeri ve Azure SQL Veritabanı.

Tabloda dizin oluşturulmasını belirtir. Bu kümelenmiş dizin veya kümelenmemiş dizin olabilir. Dizin, listelenen sütunları içerir ve verileri artan veya azalan düzende sıralar.

INDEX index_name CLUSTERED COLUMNSTORE

Şunlar için geçerlidir: SQL Server 2014 (12.x) ve üzeri ve Azure SQL Veritabanı.

Tablonun tamamının kümelenmiş columnstore diziniyle sütun biçiminde depolanmasını belirtir. Bu her zaman tablodaki tüm sütunları içerir. Satırlar columnstore sıkıştırma avantajları elde etmek için düzenlendiği için veriler alfabetik veya sayısal düzende sıralanmamıştır.

SQL Server 2022 (16.x), Azure SQL Veritabanı, Azure SQL Yönetilen ÖrneğiAUTD ve Azure Synapse Analytics ile başlayan kümelenmiş columnstore dizinindeki veriler için bir sıra belirtebilirsiniz. Daha fazla bilgi için bkz. Sıralı columnstore dizinleriyle performans ayarlama.

INDEX index_name [ NONCLUSTERED ] COLUMNSTORE ( column_name [ ,... n ] )

Şunlar için geçerlidir: SQL Server 2014 (12.x) ve sonraki sürümleri, Azure SQL Veritabanı ve Azure SQL Yönetilen Örneği.

Tabloda kümelenmemiş bir columnstore dizini oluşturulacağını belirtir. Temel alınan tablo bir satır deposu yığını veya kümelenmiş dizin olabileceği gibi, kümelenmiş columnstore dizini de olabilir. Her durumda, bir tabloda kümelenmemiş bir columnstore dizini oluşturmak, dizindeki sütunlar için verilerin ikinci bir kopyasını depolar.

Kümelenmemiş columnstore dizini, kümelenmiş columnstore dizini olarak depolanır ve yönetilir. Sütunlar sınırlı olabileceğinden ve bir tabloda ikincil dizin olarak mevcut olduğundan, bu dizine kümelenmemiş columnstore dizini adı verilir.

Azure SQL Veritabanı'nda ve Azure SQL Yönetilen ÖrneğiAUTD'de kümelenmemiş bir columnstore dizinindeki veriler için bir sıra belirtebilirsiniz. Daha fazla bilgi için bkz. Sıralı columnstore dizinleriyle performans ayarlama.

ON partition_scheme_name ( column_name )

Bölümlenmiş dizinin bölümlerinin eşlendiği dosya gruplarını tanımlayan bölüm düzenini belirtir. bölüm düzeni, CREATE PARTITION SCHEME veya ALTER PARTITION SCHEMEyürüterek veritabanında bulunmalıdır. column_name, bölümlenmiş dizinin bölümlendirileceği sütunu belirtir. Bu sütun, partition_scheme_name'nin kullandığı bölüm işlevinin bağımsız değişkeninin veri türü, uzunluğu ve duyarlığıyla eşleşmelidir. column_name dizin tanımındaki sütunlarda sınırlı değildir. Benzersiz bir dizin bölümlenmesi dışında temel tablodaki herhangi bir sütun belirtilebilir column_name benzersiz anahtar olarak kullanılanlar arasından seçilmelidir. Bu kısıtlama, Veritabanı Altyapısı'nın yalnızca tek bir bölümdeki anahtar değerlerinin benzersizliğini doğrulamasını sağlar.

Uyarı

Benzersiz olmayan, kümelenmiş bir dizini bölümlediğinizde, Veritabanı Altyapısı varsayılan olarak bölümleme sütununu kümelenmiş dizin anahtarları listesine (henüz belirtilmemişse) ekler. Benzersiz olmayan, kümelenmemiş bir dizini bölümlerken, Veritabanı Altyapısı bölümleme sütununu henüz belirtilmemişse dizinin anahtar olmayan (dahil) sütunu olarak ekler.

partition_scheme_name veya dosya grubu belirtilmezse ve tablo bölümlenmişse dizin, temel alınan tabloyla aynı bölümleme sütunu kullanılarak aynı bölümleme düzenine yerleştirilir.

Uyarı

XML dizininde bölümleme düzeni belirtemezsiniz. Temel tablo bölümlenmişse, XML dizini tabloyla aynı bölüm düzenini kullanır.

Dizinleri bölümleme hakkında daha fazla bilgi için bölümlenmiş tablolar ve dizinler.

ON filegroup_name

Belirtilen dosya grubunda belirtilen dizini oluşturur. Konum belirtilmezse ve tablo veya görünüm bölümlenmemişse, dizin temel tablo veya görünümle aynı dosya grubunu kullanır. Dosya grubu zaten var olmalıdır.

ON "varsayılan"

Varsayılan dosya grubunda belirtilen dizini oluşturur.

Uyarı

Bu bağlamda , varsayılan bir anahtar sözcük değildir. Varsayılan dosya grubu için bir tanımlayıcıdır ve ON "default" veya ON [default]gibi sınırlandırılmalıdır. Belirtilirse "default" , seçeneğin QUOTED_IDENTIFIER geçerli oturum için ON olması gerekir. Bu varsayılan ayardır. Daha fazla bilgi için bkz. SET QUOTED_IDENTIFIER.

[ FILESTREAM_ON { filestream_filegroup_name | partition_scheme_name | "NULL" } ]

Şunlar için geçerlidir: SQL Server 2008 R2 (10.50.x) ve üzeri.

Kümelenmiş dizin oluşturulduğunda tablo için FILESTREAM verilerinin yerleşimini belirtir. FILESTREAM_ON yan tümcesi, FILESTREAM verilerinin farklı bir FILESTREAM dosya grubuna veya bölüm düzenine taşınmasını sağlar.

filestream_filegroup_name, FILESTREAM dosya grubunun adıdır. Dosya grubu, CREATE DATABASE veya ALTER DATABASE deyimi kullanılarak dosya grubu için tanımlanmış bir dosyaya sahip olmalıdır; aksi takdirde bir hata oluşur.

Tablo bölümlenmişse yan tümcesi FILESTREAM_ON eklenmelidir ve tablo için bölüm düzeniyle aynı bölüm işlevini ve bölüm sütunlarını kullanan FILESTREAM dosya gruplarının bölüm şemasını belirtmelidir. Aksi takdirde bir hata oluşur.

Tablo bölümlenmemişse FILESTREAM sütunu bölümlenemez. Tablonun FILESTREAM verileri, FILESTREAM_ON yan tümcesinde belirtilen tek bir dosya grubunda depolanmalıdır.

FILESTREAM_ON NULL, kümelenmiş dizin oluşturulmaktaysa ve tabloda FILESTREAM sütunu yoksa CREATE INDEX deyiminde belirtilebilir.

Daha fazla bilgi için bkz. FILESTREAM.

ROWGUIDCOL

Yeni sütunun satır GUID sütunu olduğunu gösterir. Tablo başına yalnızca bir benzersiz belirleyici sütunu ROWGUIDCOL sütunu olarak atanabilir. ROWGUIDCOL özelliğinin uygulanması, kullanılarak $ROWGUIDsütuna başvurulmaya olanak tanır. ROWGUIDCOL özelliği yalnızca bir benzersizleştirici sütununa atanabilir. Kullanıcı tanımlı veri türü sütunları ROWGUIDCOL ile belirlenemez.

ROWGUIDCOL özelliği, sütunda depolanan değerlerin benzersizliğini zorlamaz. ROWGUIDCOL ayrıca tabloya eklenen yeni satırlar için otomatik olarak değer oluşturmaz. Her sütun için benzersiz değerler oluşturmak için INSERT deyimlerinde NEWID veya NEWSEQUENTIALID işlevini kullanın veya bu işlevleri sütun için varsayılan olarak kullanın.

İLE ŞIFRELENMIŞ

Always Encrypted özelliğini kullanarak sütunları şifrelemeyi belirtir.

  • COLUMN_ENCRYPTION_KEY = key_name

    Sütun şifreleme anahtarını belirtir. Daha fazla bilgi için bkz. CREATE COLUMN ENCRYPTION KEY.

  • ENCRYPTION_TYPE = { DETERMINISTIC | RANDOMIZED }

    Belirleyici şifreleme , belirli bir düz metin değeri için her zaman aynı şifrelenmiş değeri oluşturan bir yöntem kullanır. Belirlenimci şifrelemeyi kullanmak, eşitlik karşılaştırması, gruplandırma ve şifrelenmiş değerlere dayalı eşitlik birleşimleri kullanarak tabloları birleştirmeyi kullanarak arama yapılmasını sağlar, ancak yetkisiz kullanıcıların şifrelenmiş sütundaki desenleri inceleyerek şifrelenmiş değerler hakkındaki bilgileri tahmin etmesine de izin verebilir. İki tablonun belirleneci olarak şifrelenmiş sütunlarda birleştirilmesi, ancak her iki sütunun da aynı sütun şifreleme anahtarı kullanılarak şifrelenmesi durumunda mümkündür. Belirleyici şifreleme, karakter sütunları için ikili2 sıralama düzeniyle bir sütun harmanlaması kullanmalıdır.

    Rastgele şifreleme verileri daha az tahmin edilebilir bir şekilde şifreleyen bir yöntem kullanır. Rastgele şifreleme daha güvenlidir, ancak SQL Server örneğiniz güvenli kuşatmalarla Always Encrypted'ı desteklemediği sürece şifrelenmiş sütunlardaki hesaplamaları ve dizinleri önler. Ayrıntılar için bkz. Güvenli kuşatmalarla Always Encrypted.

    Always Encrypted kullanıyorsanız (güvenli kuşatmalar olmadan), parametrelerle veya gruplama parametreleriyle aranacak sütunlar (örneğin, bir kamu kimlik numarası) için belirleyici şifreleme kullanın. Başka kayıtlarla gruplandırılmayan veya tabloları birleştirmek için kullanılmayan ve ilgilendiğiniz şifrelenmiş sütunu içeren satırı bulmak için diğer sütunları (işlem numarası gibi) kullandığınızdan aranmayan kredi kartı numarası gibi veriler için rastgele şifreleme kullanın.

    Always Encrypted'ı güvenli kuşatmalarla kullanıyorsanız, rastgele şifreleme önerilen bir şifreleme türüdür.

    Sütunlar uygun bir veri türünde olmalıdır.

  • ALGORİTMA

    için geçerlidir: SQL Server 2016 (13.x) ve üzeri.

    'AEAD_AES_256_CBC_HMAC_SHA_256'olmalıdır.

    Özellik kısıtlamaları da dahil olmak üzere daha fazla bilgi için bkz . Always Encrypted.

SEYREK

Sütunun seyrek bir sütun olduğunu gösterir. Seyrek sütunların depolanması null değerler için iyileştirilmiştir. Seyrek sütunlar NOT NULL olarak belirlenemez. Seyrek sütunlar hakkında ek kısıtlamalar ve daha fazla bilgi için bkz. Seyrek Sütunları Kullanma.

MASKED WITH ( FUNCTION = 'mask_function' )

için geçerlidir: SQL Server 2016 (13.x) ve üzeri.

Dinamik bir veri maskesi belirtir. mask_function, uygun parametrelerle maskeleme işlevinin adıdır. Dört işlev kullanılabilir:

  • default()
  • email()
  • partial()
  • random()

ALTER ANY MASK izin gerektirir.

İşlev parametreleri için bkz. Dinamik Veri Maskeleme.

DOSYA AKıŞı

Şunlar için geçerlidir: SQL Server 2008 R2 (10.50.x) ve üzeri.

Yalnızca varbinary(max) sütunları için geçerlidir. Varbinary(max) BLOB verileri için FILESTREAM depolamasını belirtir.

Tabloda ayrıca ROWGUIDCOL özniteliğine sahip benzersiz belirleyici veri türünde bir sütun da olmalıdır. Bu sütun null değerlere izin vermemelidir ve BENZERSIZ veya BİRİnCİl ANAHTAR tek sütun kısıtlamasına sahip olmalıdır. Sütun için GUID değeri, veri eklerken bir uygulama tarafından veya NEWID () işlevini kullanan DEFAULT kısıtlaması tarafından sağlanmalıdır.

ROWGUIDCOL sütunu bırakılamaz ve tablo için tanımlanmış bir FILESTREAM sütunu varken ilgili kısıtlamalar değiştirilemez. ROWGUIDCOL sütunu yalnızca son FILESTREAM sütunu bırakıldıktan sonra bırakılabilir.

Bir sütun için FILESTREAM depolama özniteliği belirtildiğinde, bu sütunun tüm değerleri dosya sistemindeki FILESTREAM veri kapsayıcısında depolanır.

HARMANLAMA collation_name

Sütun için harmanlamayı belirtir. Harmanlama adı bir Windows harmanlama adı veya SQL harmanlama adı olabilir. collation_name yalnızca char, varchar, text, nchar, nvarchar ve ntext veri türlerinin sütunları için geçerlidir. Belirtilmezse, sütun kullanıcı tanımlı bir veri türündeyse kullanıcı tanımlı veri türünün harmanlaması veya veritabanının varsayılan harmanlaması atanır.

Windows ve SQL harmanlama adları hakkında daha fazla bilgi için bkz. Windows Harmanlama Adı ve SQL Harmanlama Adı.

Daha fazla bilgi için bkz. COLLATE.

KISITLAMA

BİrİnCİl ANAHTAR, DEĞİl NULL, BENZERSİz, YABANCI ANAHTAR veya CHECK kısıtlaması tanımının başlangıcını gösteren isteğe bağlı anahtar.

  • constraint_name

    Kısıtlamanın adı. Kısıtlama adları, tablonun ait olduğu şema içinde benzersiz olmalıdır.

  • NULL | NOT NULL

    Sütunda null değerlere izin verilip verilmeyeceğini belirleyin. NULL kesinlikle bir kısıtlama değildir, ancak NOT NULL gibi belirtilebilir. NOT NULL, hesaplanan sütunlar için yalnızca PERSISTED de belirtilmişse belirtilebilir.

  • BİRİNCİL ANAHTAR

    Benzersiz bir dizin aracılığıyla belirtilen sütun veya sütunlar için varlık bütünlüğünü zorlayan kısıtlama. Tablo başına yalnızca bir BİRİnCİl ANAHTAR kısıtlaması oluşturulabilir.

  • EŞSİZ

    Benzersiz bir dizin aracılığıyla belirtilen sütun veya sütunlar için varlık bütünlüğü sağlayan kısıtlama. Bir tabloda birden çok BENZERSİz kısıtlaması olabilir.

  • KÜMELENDİ | KÜMELENMİDİ

    BİrİnCİl ANAHTAR veya BENZERSİz kısıtlaması için kümelenmiş veya kümelenmemiş bir dizin oluşturulduğunu gösterir. BİRİnCİl ANAHTAR kısıtlamaları varsayılan olarak KÜMELENDİ ve BENZERSİz kısıtlamaları varsayılan olarak KÜMELENMİSDİ olarak ayarlanır.

    Deyiminde CREATE TABLE CLUSTERED yalnızca bir kısıtlama için belirtilebilir. BİRİnCİl ANAHTAR kısıtlaması için KÜMELENDİ belirtilirse ve BİrİnCİl ANAHTAR kısıtlaması da belirtilirse, BİRİnCİl ANAHTAR varsayılan olarak KÜMELENDİrİlMİYOR olarak ayarlanır.

  • YABANCı ANAHTAR BAŞVURULARı

    Sütun veya sütunlardaki veriler için bilgi tutarlılığı sağlayan kısıtlama. YABANCI ANAHTAR kısıtlamaları, sütundaki her değerin başvuruda bulunan ilgili sütunda veya başvuruda bulunan tablodaki sütunlarda olmasını gerektirir. YABANCI ANAHTAR kısıtlamaları yalnızca başvuruda bulunan tablodaki BİRİnCİl ANAHTAR veya BENZERSİz kısıtlamaları olan sütunlara veya başvuruda bulunan tablodaki BENZERSİz İnDİS'te başvuruda bulunan sütunlara başvurabilir. Hesaplanan sütunlardaki yabancı anahtarlar da PERSISTED olarak işaretlenmelidir.

  • [ schema_name. ] referenced_table_name ]

    FOREIGN KEY kısıtlaması tarafından başvurulan tablonun adı ve ait olduğu şema.

  • ( ref_column [ ,... n ] )

    FOREIGN KEY kısıtlaması tarafından başvuruda bulunan tablodan bir sütun veya sütun listesi.

  • SILMEDE { EYLEM YOK | ART ARDA | SET NULL | VARSAYıLANI AYARLA }

    Bu satırların bilgi ilişkisi varsa ve başvuruda bulunan satır üst tablodan silinirse, oluşturulan tablodaki satırlara hangi eylemin olacağını belirtir. Varsayılan değer EYLEM YOK'dur.

  • EYLEM YOK

    Veritabanı Altyapısı bir hata oluşturur ve üst tablodaki satırdaki silme eylemi geri alınır.

  • ÇAĞLAYAN

    Bu satır üst tablodan silinirse, karşılık gelen satırlar başvuran tablodan silinir.

  • SET NULL

    Üst tablodaki karşılık gelen satır silinirse, yabancı anahtarı oluşturan tüm değerler NULL olarak ayarlanır. Bu kısıtlamanın yürütülmesi için yabancı anahtar sütunlarının null atanabilir olması gerekir.

  • VARSAYıLANı AYARLA

    Üst tablodaki karşılık gelen satır silindiğinde yabancı anahtarı oluşturan tüm değerler varsayılan değerlerine ayarlanır. Bu kısıtlamanın yürütülmesi için tüm yabancı anahtar sütunlarının varsayılan tanımları olmalıdır. Bir sütun null atanabilirse ve açık bir varsayılan değer kümesi yoksa, NULL sütunun örtük varsayılan değeri olur.

    Tablonun mantıksal kayıtları kullanan bir birleştirme yayınına eklenip eklenmediğini belirtmeyin CASCADE . Mantıksal kayıtlar hakkında daha fazla bilgi için bkz. İlişkili Satırlarda Yapılan Değişiklikleri Mantıksal Kayıtlarla Gruplandırma.

    ON DELETE CASCADE tabloda zaten bir INSTEAD OF tetikleyici ON DELETE varsa tanımlanamaz.

    Örneğin, AdventureWorks2022 veritabanında ProductVendor tablonun tabloyla Vendor bilgi ilişkisi vardır. Yabancı ProductVendor.BusinessEntityID anahtar birincil anahtara başvurur Vendor.BusinessEntityID .

    Tablodaki bir satırda bir DELETE deyim yürütülürse ve için Vendorbir ON DELETE CASCADE eylem belirtilirse, Veritabanı Altyapısı tablodaki ProductVendor.BusinessEntityID bir veya daha fazla bağımlı satırı ProductVendor denetler. Varsa, tablodaki ProductVendor bağımlı satırlar ve tabloda başvuruda bulunılan Vendor satır silinir.

    Buna karşılık, belirtilirse NO ACTION , Veritabanı Altyapısı bir hata oluşturur ve tabloda başvuruda bulunan en az bir satır varsa satırdaki silme eylemini VendorProductVendor geri alır.

  • GÜNCELLEŞTIRMEDE { EYLEM YOK | ART ARDA | SET NULL | VARSAYıLANI AYARLA }

    Bu satırlar bilgi ilişkisine sahip olduğunda ve başvuruda bulunan satır üst tabloda güncelleştirildiğinde tablodaki satırlara hangi eylemin olacağını belirtir. Varsayılan değer EYLEM YOK'dur.

  • EYLEM YOK

    Veritabanı Altyapısı bir hata oluşturur ve üst tablodaki satırdaki güncelleştirme eylemi geri alınır.

  • ÇAĞLAYAN

    İlgili satır üst tabloda güncelleştirildiğinde başvuru tablosunda karşılık gelen satırlar güncelleştirilir.

  • SET NULL

    Üst tablodaki karşılık gelen satır güncelleştirildiğinde yabancı anahtarı oluşturan tüm değerler NULL olarak ayarlanır. Bu kısıtlamanın yürütülmesi için yabancı anahtar sütunlarının null atanabilir olması gerekir.

  • VARSAYıLANı AYARLA

    Yabancı anahtarı oluşturan tüm değerler, üst tablodaki karşılık gelen satır güncelleştirildiğinde varsayılan değerlerine ayarlanır. Bu kısıtlamanın yürütülmesi için tüm yabancı anahtar sütunlarının varsayılan tanımları olmalıdır. Bir sütun null atanabilirse ve açık bir varsayılan değer kümesi yoksa, NULL sütunun örtük varsayılan değeri olur.

    Tablonun mantıksal kayıtları kullanan bir birleştirme yayınına eklenip eklenmediğini belirtmeyin CASCADE . Mantıksal kayıtlar hakkında daha fazla bilgi için bkz. İlişkili Satırlarda Yapılan Değişiklikleri Mantıksal Kayıtlarla Gruplandırma.

    ON UPDATE CASCADE, SET NULLveya SET DEFAULT değiştirilen tabloda bir INSTEAD OF tetikleyici ON UPDATE zaten varsa tanımlanamaz.

    Örneğin, AdventureWorks2022ProductVendor veritabanında tablonun tabloyla Vendor bir bilgi ilişkisi vardır: ProductVendor.BusinessEntity yabancı anahtar birincil anahtara Vendor.BusinessEntityID başvurur.

    Tablodaki Vendor bir satırda bir UPDATE deyimi yürütülürse ve için ProductVendor.BusinessEntityIDbir ON UPDATE CASCADE eylemi belirtilirse, Veritabanı Altyapısı tablodaki ProductVendor bir veya daha fazla bağımlı satırı denetler. Varsa, tablodaki ProductVendor bağımlı satırlar ve tabloda başvuruda bulunılan Vendor satır güncelleştirilir.

    Buna karşılık, EYLEM YOK belirtilirse, Veritabanı Altyapısı bir hata oluşturur ve tabloda buna başvuran en az bir satır varsa satırdaki Vendor güncelleştirme eylemini ProductVendor geri alır.

  • ÇEK

    Bir sütuna veya sütunlara girilebilen olası değerleri sınırlayarak etki alanı bütünlüğünü zorlayan bir kısıtlama. Hesaplanan sütunlardaki CHECK kısıtlamaları DA PERSISTED olarak işaretlenmelidir.

  • logical_expression

    DOĞRU veya YANLIŞ döndüren mantıksal ifade. Diğer ad veri türleri ifadenin parçası olamaz.

  • column_name

    Kısıtlama tanımında kullanılan sütunları belirtmek için tablo kısıtlamalarında kullanılan, parantez içinde bir sütun veya sütun listesi.

  • [ ASC | DESC ]

    Tablo kısıtlamalarına katılan sütun veya sütunların sıralanma sırasını belirtir. Varsayılan değer ASC'dir.

  • partition_scheme_name

    Bölümlenmiş tablonun bölümlerinin eşlendiği dosya gruplarını tanımlayan bölüm düzeninin adı. Bölüm düzeni veritabanında mevcut olmalıdır.

  • [ partition_column_name. ]

    Bölümlenmiş tablonun bölümlendirileceği sütunu belirtir. Sütun, veri türü, uzunluğu ve duyarlık açısından partition_scheme_name tarafından kullanılan bölüm işlevinde belirtilen sütunla eşleşmelidir. Bölüm işlevine katılan hesaplanan bir sütun açıkça PERSISTED olarak işaretlenmelidir.

    Önemli

    Bölümlenmiş tabloların bölümleme sütununda NOT NULL değerini ve AYRıCA ALTER TABLE'un kaynakları veya hedefleri olan bölümlenmemiş tabloları belirtmenizi öneririz... SWITCH işlemleri. Bunu yaptığınızda, bölümleme sütunlarında check kısıtlamalarının null değerleri denetlemesi gerekmez.

  • WITH FILLFACTOR = fillfactor

    Veritabanı Altyapısı'nın dizin verilerini depolamak için kullanılan her dizin sayfasını ne kadar dolu hale getirmesi gerektiğini belirtir. 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. 0 ve 100 dolgu faktörü değerleri her açıdan aynıdır.

    Önemli

    BİRİnCİl ANAHTAR veya BENZERSİz kısıtlamalar için geçerli olan tek dizin seçeneği olarak FILLFACTOR = fillfactor ile belgeleme geriye dönük uyumluluk için korunur, ancak gelecek sürümlerde bu şekilde belgelenmez.

ALL_SPARSE_COLUMNS IÇIN XML COLUMN_SET column_set_name

Sütun kümesinin adı. Sütun kümesi, tablonun tüm seyrek sütunlarını yapılandırılmış bir çıktıda birleştiren, yazılmamış bir XML gösterimidir. Sütun kümeleri hakkında daha fazla bilgi için bkz. Sütun Kümelerini Kullanma.

SYSTEM_TIME DÖNEMİ ( system_start_time_column_name , system_end_time_column_name )

Şunlar için geçerlidir: SQL Server 2016 (13.x) ve üzeri ve Azure SQL Veritabanı.

Sistemin bir kaydın geçerli olduğu dönemi kaydetmek için kullanacağı sütunların adlarını belirtir. Zamansal tablo oluşturmak için ve GENERATED ALWAYS AS ROW { START | END } bağımsız değişkenleriyle WITH SYSTEM_VERSIONING = ON bu bağımsız değişkeni kullanın. Daha fazla bilgi için bkz. Zamana Bağlı Tablolar.

COMPRESSION_DELAY

Şunlar için geçerlidir: SQL Server 2016 (13.x) ve üzeri ve Azure SQL Veritabanı.

Bellek için iyileştirilmiş bir değer için gecikme, sütun deposu dizinine sıkıştırma için uygun hale gelmeden önce bir satırın tabloda değişmeden kalması gereken en az dakika sayısını belirtir. SQL Server, son güncelleştirme saatlerine göre sıkıştırmak için belirli satırları seçer. Örneğin, satırlar iki saatlik bir süre boyunca sık sık değişiyorsa, SQL Server satırı sıkıştırmadan önce güncelleştirmelerin tamamlandığından emin olmak için ayarlayabilirsiniz COMPRESSION_DELAY = 120 Minutes .

Disk tabanlı bir tablo için gecikme, SQL Server'ın sıkıştırılmış satır grubuna sıkıştırabilmesi için ÖNCE KAPALI durumdaki bir delta satır grubunun delta satır grubunda kalması gereken en az dakika sayısını belirtir. Disk tabanlı tablolar tek tek satırlarda ekleme ve güncelleştirme sürelerini izlemediğinden, SQL Server gecikmeyi KAPALI durumdaki satır gruplarına uygular.

Varsayılan değer 0 dakikadır.

'nin ne zaman kullanılacağına COMPRESSION_DELAYilişkin öneriler için bkz. Gerçek zamanlı operasyonel analiz için Columnstore ile çalışmaya başlama

< > table_option ::=

Bir veya daha fazla tablo seçeneğini belirtir.

VERİ_SIKIŞTIRMA

Belirtilen tablo, bölüm numarası veya bölüm aralığı için veri sıkıştırma seçeneğini belirtir. Seçenekler şunlardır:

  • HİÇBİRİ

    Tablo veya belirtilen bölümler sıkıştırılamaz.

  • Sıra

    Tablo veya belirtilen bölümler satır sıkıştırma kullanılarak sıkıştırılır.

  • SAYFA

    Tablo veya belirtilen bölümler sayfa sıkıştırma kullanılarak sıkıştırılır.

  • COLUMNSTORE

    Şunlar için geçerlidir: SQL Server 2016 (13.x) ve üzeri ve Azure SQL Veritabanı.

    Hem kümelenmemiş columnstore hem de kümelenmiş columnstore dizinleri dahil olmak üzere yalnızca columnstore dizinleri için geçerlidir. COLUMNSTORE, en performanslı columnstore sıkıştırmasıyla sıkıştırmayı belirtir. Bu tipik bir seçimdir.

  • COLUMNSTORE_ARCHIVE

    Şunlar için geçerlidir: SQL Server 2016 (13.x) ve üzeri ve Azure SQL Veritabanı.

    Hem kümelenmemiş columnstore hem de kümelenmiş columnstore dizinleri dahil olmak üzere yalnızca columnstore dizinleri için geçerlidir. COLUMNSTORE_ARCHIVE tabloyu veya bölümü daha küçük bir boyuta daha fazla sıkıştırır. Bu, arşivleme için veya daha küçük bir depolama boyutu gerektiren ve depolama ve alma için daha fazla zaman ayırabilen diğer durumlar için kullanılabilir.

Daha fazla bilgi için bkz. Veri Sıkıştırma.

XML_COMPRESSION

için geçerlidir: SQL Server 2022 (16.x) ve sonraki sürümler, Azure SQL Veritabanı ve Azure SQL Yönetilen Örneği.

Tablodaki xml veri türü sütunları için XML sıkıştırma seçeneğini belirtir. Seçenekler şunlardır:

  • AÇIK

    xml veri türünü kullanan sütunlar sıkıştırılır.

  • KAPALI

    xml veri türünü kullanan sütunlar sıkıştırılamaz.

BÖLÜMLERE ( { <partition_number_expression> | [ ,... n ] )

DATA_COMPRESSION veya XML_COMPRESSION ayarlarının uygulandığı bölümleri belirtir. Tablo bölümlenmemişse, ON PARTITIONS bağımsız değişken bir hata oluşturur. ON PARTITIONS Yan tümcesi sağlanmamışsa, DATA_COMPRESSION seçenek bölümlenmiş tablonun tüm bölümlerine uygulanır.

partition_number_expression aşağıdaki yollarla belirtilebilir:

  • Bir bölümün bölüm numarasını belirtin, örneğin: ON PARTITIONS (2)
  • Virgülle ayrılmış birkaç bölüm için bölüm numaralarını sağlayın, örneğin: ON PARTITIONS (1, 5)
  • Hem aralıkları hem de tek tek bölümleri sağlayın, örneğin: ON PARTITIONS (2, 4, 6 TO 8)

<range>, to sözcüğüyle ayrılmış bölüm numaraları olarak belirtilebilir, örneğin: ON PARTITIONS (6 TO 8).

Farklı bölümler için farklı veri sıkıştırma türleri ayarlamak için, DATA_COMPRESSION seçeneğini birden çok kez belirtin, örneğin:

WITH
(
    DATA_COMPRESSION = NONE ON PARTITIONS (1),
    DATA_COMPRESSION = ROW ON PARTITIONS (2, 4, 6 TO 8),
    DATA_COMPRESSION = PAGE ON PARTITIONS (3, 5)
);

XML_COMPRESSION seçeneğini birden çok kez de belirtebilirsiniz, örneğin:

WITH
(
    XML_COMPRESSION = OFF ON PARTITIONS (1),
    XML_COMPRESSION = ON ON PARTITIONS (2, 4, 6 TO 8),
    XML_COMPRESSION = OFF ON PARTITIONS (3, 5)
);

< > index_option ::=

Bir veya daha fazla dizin seçeneğini belirtir. Bu seçeneklerin tam açıklaması için bkz. CREATE INDEX.

PAD_INDEX = { ON | KAPALI }

AÇILDI olduğunda, FILLFACTOR tarafından belirtilen boş alan yüzdesi dizinin ara düzey sayfalarına uygulanır. KAPALI olduğunda veya FILLFACTOR değeri belirtilmediğinde, ara sayfalardaki anahtar kümesi dikkate alınarak ara düzey sayfalar, dizinin sahip olabileceği en büyük boyuta sahip en az bir satır için yeterli alan bırakarak kapasiteye yakın bir değere doldurulur. Varsayılan değer KAPALI'dır.

FILLFACTOR = fillfactor

Veritabanı Altyapısı'nın dizin oluşturma veya değiştirme sırasında her dizin sayfasının yaprak düzeyini ne kadar tam yapması gerektiğini gösteren bir yüzde belirtir. fillfactor , 1 ile 100 olan bir tamsayı değeri olmalıdır. Varsayılan değer 0'dır. 0 ve 100 dolgu faktörü değerleri her açıdan aynıdır.

IGNORE_DUP_KEY = { ON | KAPALI }

Ekleme işlemi benzersiz bir dizine yinelenen anahtar değerleri eklemeyi denediğinde hata yanıtını belirtir. IGNORE_DUP_KEY seçeneği yalnızca dizin oluşturulduktan veya yeniden oluşturulduktan sonra ekleme işlemleri için geçerlidir. SEÇENEĞIn CREATE INDEXyürütülürken, ALTER INDEXveya UPDATEhiçbir etkisi yoktur. Varsayılan değer KAPALI'dır.

  • AÇIK

    Benzersiz bir dizine yinelenen anahtar değerleri eklendiğinde bir uyarı iletisi oluşur. Yalnızca benzersizlik kısıtlamasını ihlal eden satırlar başarısız olur.

  • KAPALI

    Benzersiz bir dizine yinelenen anahtar değerleri eklendiğinde bir hata iletisi oluşur. INSERT işleminin tamamı geri alınır.

IGNORE_DUP_KEY görünümde oluşturulan dizinler, benzersiz olmayan dizinler, XML dizinleri, uzamsal dizinler ve filtrelenmiş dizinler için ON olarak ayarlanamaz.

IGNORE_DUP_KEYgörüntülemek için sys.indexeskullanın.

Geriye dönük uyumlu söz diziminde, WITH IGNORE_DUP_KEYWITH IGNORE_DUP_KEY = ONeşdeğerdir.

STATISTICS_NORECOMPUTE = { ON | KAPALI }

AÇILDI olduğunda, güncel olmayan dizin istatistikleri otomatik olarak yeniden derlenmez. KAPALI olduğunda, otomatik istatistik güncelleştirme etkinleştirilir. Varsayılan değer KAPALI'dır.

ALLOW_ROW_LOCKS = { ON | KAPALI }

ON olduğunda, dizine eriştiğiniz zaman satır kilitlerine izin verilir. Veritabanı Altyapısı satır kilitlerinin ne zaman kullanılacağını belirler. KAPALI olduğunda satır kilitleri kullanılmaz. Varsayılan değer ON'dır.

ALLOW_PAGE_LOCKS = { ON | KAPALI }

ON olduğunda, dizine eriştiğiniz zaman sayfa kilitlerine izin verilir. Veritabanı Altyapısı, sayfa kilitlerinin ne zaman kullanılacağını belirler. KAPALI olduğunda sayfa kilitleri kullanılmaz. Varsayılan değer ON'dır.

OPTIMIZE_FOR_SEQUENTIAL_KEY = { ON | KAPALI }

Şunlar için geçerlidir: SQL Server 2019 (15.x) ve üzeri, Azure SQL Veritabanı ve Azure SQL Yönetilen Örneği.

Son sayfa ekleme çekişmesi için iyileştirilip iyileştirilmeyeceğini belirtir. Varsayılan değer KAPALI'dır. Daha fazla bilgi için CREATE INDEX sayfasının Sıralı Anahtarlar bölümüne bakın.

FILETABLE_DIRECTORY = directory_name

için geçerlidir: SQL Server 2012 (11.x) ve üzeri.

Windows ile uyumlu FileTable dizin adını belirtir. Bu ad, veritabanındaki tüm FileTable dizin adları arasında benzersiz olmalıdır. Harmanlama ayarlarından bağımsız olarak benzersizlik karşılaştırması büyük/küçük harfe duyarlı değildir. Bu değer belirtilmezse FileTable adı kullanılır.

FILETABLE_COLLATE_FILENAME = { collation_name | database_default }

için geçerlidir: SQL Server 2012 (11.x) ve üzeri. Azure SQL Veritabanı ve Azure SQL Yönetilen Örneği desteklemez FILETABLE.

FileTable'daki sütuna uygulanacak harmanlamanın Name adını belirtir. Harmanlama, Windows işletim sistemi dosya adlandırma semantiğine uymak için büyük/küçük harfe duyarlı olmamalıdır. Bu değer belirtilmezse, veritabanı varsayılan harmanlaması kullanılır. Veritabanı varsayılan harmanlaması büyük/küçük harfe duyarlıysa bir hata oluşur ve CREATE TABLE işlemi başarısız olur.

  • collation_name

    Büyük/küçük harfe duyarlı olmayan harmanlamanın adı.

  • database_default

    Veritabanı için varsayılan harmanlamanın kullanılması gerektiğini belirtir. Bu harmanlama büyük/küçük harfe duyarlı olmamalıdır.

FILETABLE_PRIMARY_KEY_CONSTRAINT_NAME = constraint_name

için geçerlidir: SQL Server 2012 (11.x) ve üzeri. Azure SQL Veritabanı ve Azure SQL Yönetilen Örneği desteklemez FILETABLE.

FileTable'da otomatik olarak oluşturulan birincil anahtar kısıtlaması için kullanılacak adı belirtir. Bu değer belirtilmezse, sistem kısıtlama için bir ad oluşturur.

FILETABLE_STREAMID_UNIQUE_CONSTRAINT_NAME = constraint_name

için geçerlidir: SQL Server 2012 (11.x) ve üzeri. Azure SQL Veritabanı ve Azure SQL Yönetilen Örneği desteklemez FILETABLE.

FileTable'daki stream_id sütununda otomatik olarak oluşturulan benzersiz kısıtlama için kullanılacak adı belirtir. Bu değer belirtilmezse, sistem kısıtlama için bir ad oluşturur.

FILETABLE_FULLPATH_UNIQUE_CONSTRAINT_NAME = constraint_name

için geçerlidir: SQL Server 2012 (11.x) ve üzeri. Azure SQL Veritabanı ve Azure SQL Yönetilen Örneği desteklemez FILETABLE.

FileTable'daki parent_path_locator ve ad sütunlarında otomatik olarak oluşturulan benzersiz kısıtlama için kullanılacak adı belirtir. Bu değer belirtilmezse, sistem kısıtlama için bir ad oluşturur.

SYSTEM_VERSIONING = ON [ ( HISTORY_TABLE = schema_name.history_table_name [ , DATA_CONSISTENCY_CHECK = { ON | OFF } ] ) ]

Şunlar için geçerlidir: SQL Server 2016 (13.x) ve üzeri, Azure SQL Veritabanı ve Azure SQL Yönetilen Örneği.

Veri türü, null atanabilirlik kısıtlaması ve birincil anahtar kısıtlaması gereksinimleri karşılanırsa tablonun sistem sürümünü etkinleştirir. Sistem, sistem sürümüne sahip tablodaki her kaydın geçmişini ayrı bir geçmiş tablosuna kaydeder. HISTORY_TABLE bağımsız değişkeni kullanılmazsa, bu geçmiş tablosunun adı MSSQL_TemporalHistoryFor<primary_table_object_id>olur. Geçmiş tablosunun adı geçmiş tablosu oluşturulurken belirtilirse, şemayı ve tablo adını belirtmeniz gerekir.

Geçmiş tablosu yoksa, sistem geçerli tabloyla aynı dosya grubundaki geçerli tablonun şemasıyla eşleşen yeni bir geçmiş tablosu oluşturur ve iki tablo arasında bir bağlantı oluşturur ve sistemin geçmiş tablosundaki geçerli tablodaki her kaydın geçmişini kaydetmesini sağlar. Varsayılan olarak, geçmiş tablosu PAGE sıkıştırılmıştır.

HISTORY_TABLE Bağımsız değişken bir bağlantı oluşturmak ve var olan bir geçmiş tablosunu kullanmak için kullanılırsa, bağlantı geçerli tablo ile belirtilen tablo arasında oluşturulur. Geçerli tablo bölümlenmişse, geçmiş tablosu varsayılan dosya grubunda oluşturulur çünkü bölümleme yapılandırması geçerli tablodan tarihçe tablosuna otomatik olarak çoğaltılmaz. Var olan bir geçmiş tablosuna bağlantı oluştururken veri tutarlılığı denetimi gerçekleştirmeyi seçebilirsiniz. Bu veri tutarlılığı denetimi, mevcut kayıtların çakışmamasını sağlar. Veri tutarlılığı denetimini gerçekleştirmek varsayılandır.

Bir tabloda sistem sürümü oluşturmayı etkinleştirmek için ve PERIOD FOR SYSTEM_TIME bağımsız değişkenleriyle GENERATED ALWAYS AS ROW { START | END } bu bağımsız değişkeni kullanın. Daha fazla bilgi için bkz. Zamana Bağlı Tablolar. Güncelleştirilebilir bir kayıt defteri tablosu oluşturmak için bu bağımsız değişkeni bağımsız değişkenle WITH LEDGER = ON birlikte kullanın. Kayıt defteri tablolarıyla var olan geçmiş tablolarının kullanılmasına izin verilmez.

REMOTE_DATA_ARCHIVE = { ON [ ( table_stretch_options [ ,... n ] ) ] | KAPALI ( MIGRATION_STATE = DURAKLATILDI ) }

için geçerlidir: SQL Server 2016 (13.x) ve üzeri.

Stretch Database'in etkin veya devre dışı olduğu yeni tabloyu oluşturur. Daha fazla bilgi için bkz. Stretch Database.

Önemli

Stretch Database, SQL Server 2022 (16.x) ve Azure SQL Veritabanı'nda kullanım dışıdır. Bu özellik, Veritabanı Altyapısı'nın gelecekteki bir sürümünde kaldırılacaktır. Bu özelliği yeni geliştirme çalışmalarında kullanmaktan kaçının ve şu anda bu özelliği kullanan uygulamaları değiştirmeyi planlayın.

Tablo için Esnetme Veritabanını Etkinleştirme

belirterek ONbir tablo için Esnetmeyi etkinleştirdiğinizde isteğe bağlı olarak verileri hemen MIGRATION_STATE = OUTBOUND geçirmeyi veya veri geçişlerini ertelemeyi belirtebilirsinizMIGRATION_STATE = PAUSED. Varsayılan değer şudur: MIGRATION_STATE = OUTBOUND. Bir tablo için Stretch'i etkinleştirme hakkında daha fazla bilgi için bkz. Tablo için Stretch Database'i etkinleştirme.

Önkoşullar. Bir tablo için Stretch'i etkinleştirmeden önce, sunucuda ve veritabanında Stretch'i etkinleştirmeniz gerekir. Daha fazla bilgi için bkz. Bir veritabanı için Stretch Database'i etkinleştirme.

İzinler. Bir veritabanı veya tablo için Stretch'i etkinleştirmek için db_owner izinleri gerekir. Bir tablo için Stretch'i etkinleştirmek için tabloda ALTER izinleri de gerekir.

[ FILTER_PREDICATE = { NULL | koşul } ]

için geçerlidir: SQL Server 2016 (13.x) ve üzeri.

İsteğe bağlı olarak, hem geçmiş hem de geçerli verileri içeren bir tablodan geçirilebilen satırları seçmek için bir filtre koşulu belirtir. Koşul, belirleyici bir satır içi tablo değerli işlevi çağırmalıdır. Daha fazla bilgi için bkz . Bir tablo için Stretch Database'i etkinleştirme ve Filtre işlevi kullanarak geçirileceği satırları seçme.

Önemli

Kötü performans gösteren bir filtre koşulu sağlarsanız, veri geçişi de düşük performans gösterir. Stretch Database, CROSS APPLY işlecini kullanarak tabloya filtre koşulunu uygular.

Filtre koşulu belirtmezseniz tablonun tamamı geçirilir.

Bir filtre koşulu belirttiğinizde, MIGRATION_STATEde belirtmeniz gerekir.

MIGRATION_STATE = { GIDEN | GELEN | DURAKLATILDI }

Şunlar için geçerlidir: SQL Server 2016 (13.x) ve üzeri, Azure SQL Veritabanı ve Azure SQL Yönetilen Örneği.

  • VERILERI SQL Server'dan Azure SQL Veritabanı'na geçirmek için belirtin OUTBOUND .

  • Tablo için uzak verileri Azure SQL Veritabanı'ndan SQL Server'a geri kopyalamak ve tablo için Esnetmeyi devre dışı bırakmak için belirtin INBOUND . Daha fazla bilgi için bkz. Stretch Database'i devre dışı bırakma veuzak verileri geri getirme.

    Bu işlem veri aktarımı maliyetlerine neden olur ve iptal edilemez.

  • Veri geçişlerini duraklatmak veya ertelemek için PAUSED belirtin. Daha fazla bilgi için bkz. Veritabanı'-Stretch veri geçişlerini duraklatma ve sürdürme.

[ DATA_DELETION = ON { ( FILTER_COLUMN = column_name, RETENTION_PERIOD = { SONSUZ | sayı { GÜN | GÜN | HAFTA | HAFTALAR | AY | AYLAR | YIL | YIL } ) } ]

Şunlar için geçerlidir: Yalnızca Azure SQL Edge

Bir veritabanı içindeki tablolardan eski veya eski verilerin saklama ilkesi tabanlı temizlenmesini sağlar. Daha fazla bilgi için bkz. Veri Saklamayı Etkinleştirme ve Devre Dışı Bırakma. Veri saklamanın etkinleştirilmesi için aşağıdaki parametreler belirtilmelidir.

  • FILTER_COLUMN = { column_name }

    Tablodaki satırların eski olup olmadığını belirlemek için kullanılacak sütunu belirtir. Filtre sütunu için aşağıdaki veri türlerine izin verilir.

    • tarih
    • tarih ve saat
    • datetime2
    • smalldatetime
    • datetimeoffset
  • RETENTION_PERIOD = { SONSUZ | sayı {GÜN | GÜN | HAFTA | HAFTALAR | AY | AYLAR | YIL | YILLAR }}

    Tablo için bekletme süresi ilkesini belirtir. Bekletme süresi, pozitif bir tamsayı değeri ile tarih bölümü biriminin birleşimi olarak belirtilir.

MEMORY_OPTIMIZED

Şunlar için geçerlidir: SQL Server 2014 (12.x) ve üzeri, Azure SQL Veritabanı ve Azure SQL Yönetilen Örneği. Azure SQL Yönetilen Örneği, Genel Amaçlı katmanda bellek için iyileştirilmiş tabloları desteklemez.

ON değeri tablonun bellek için iyileştirilmiş olduğunu gösterir. Bellek için iyileştirilmiş tablolar, işlem işleme performansını iyileştirmek için kullanılan In-Memory OLTP özelliğinin bir parçasıdır. In-Memory OLTP kullanmaya başlamak için bkz. Hızlı Başlangıç 1: In-Memory OLTP Technologies for Faster Transact-SQL Performance. Bellek için iyileştirilmiş tablolar hakkında daha ayrıntılı bilgi için bkz. Memory-Optimized Tablolar.

Varsayılan OFF değeri tablonun disk tabanlı olduğunu gösterir.

DAYANIKLILIK

Şunlar için geçerlidir: SQL Server 2014 (12.x) ve üzeri, Azure SQL Veritabanı ve Azure SQL Yönetilen Örneği.

değeri SCHEMA_AND_DATA , tablonun dayanıklı olduğunu gösterir; başka bir deyişle değişiklikler diskte kalıcı olur ve yeniden başlatma veya yük devretmeden sonra kalır. SCHEMA_AND_DATA varsayılan değerdir.

değeri SCHEMA_ONLY tablonun dayanıklı olmadığını gösterir. Tablo şeması kalıcı olur, ancak veritabanının yeniden başlatılması veya yük devretmesi sonrasında veri güncelleştirmeleri kalıcı olmaz. DURABILITY = SCHEMA_ONLY yalnızca ile MEMORY_OPTIMIZED = ONizin verilir.

Uyarı

ile DURABILITY = SCHEMA_ONLYbir tablo oluşturulduğunda ve READ_COMMITTED_SNAPSHOT daha sonra kullanılarak ALTER DATABASEdeğiştirildiğinde tablodaki veriler kaybolur.

KOVA_SAYISI

Şunlar için geçerlidir: SQL Server 2014 (12.x) ve üzeri, Azure SQL Veritabanı ve Azure SQL Yönetilen Örneği.

Karma dizinde oluşturulması gereken demet sayısını gösterir. Karma dizinlerdeki BUCKET_COUNT için en yüksek değer 1.073.741.824'dür. Demet sayıları hakkında daha fazla bilgi için bkz. Memory-Optimized Tabloları için dizinler.

Bucket_count gerekli bir bağımsız değişkendir.

DİZİN

Şunlar için geçerlidir: SQL Server 2014 (12.x) ve üzeri, Azure SQL Veritabanı ve Azure SQL Yönetilen Örneği.

Sütun ve tablo dizinleri CREATE TABLE deyiminin bir parçası olarak belirtilebilir. Bellek için iyileştirilmiş tablolarda dizin ekleme ve kaldırma hakkında ayrıntılı bilgi için bkz. Memory-Optimized Tablolarını Değiştirme

  • KARMA

    Şunlar için geçerlidir: SQL Server 2014 (12.x) ve üzeri, Azure SQL Veritabanı ve Azure SQL Yönetilen Örneği.

    Karma dizinin oluşturulduğunu gösterir.

    Karma dizinler yalnızca bellek için iyileştirilmiş tablolarda desteklenir.

LEDGER = ON ( <ledger_option> [ ,... n ] ) | KAPALI

Şunlar için geçerlidir: SQL Server 2022 (16.x), Azure SQL Veritabanı ve Azure SQL Yönetilen Örneği.

Uyarı

Ekstre bir genel muhasebe tablosu oluşturursa, ENABLE LEDGER izin gereklidir.

Oluşturulan tablonun bir kayıt defteri tablosu (ON) olup olmadığını (KAPALI) gösterir. Varsayılan değer KAPALI'dır. APPEND_ONLY = ON Seçenek belirtilirse, sistem yalnızca yeni satır eklemeye izin veren bir yalnızca ekleme kayıt defteri tablosu oluşturur. Aksi takdirde sistem güncelleştirilebilir bir kayıt defteri tablosu oluşturur. Güncelleştirilebilir bir kayıt defteri tablosu da bağımsız değişken gerektirir SYSTEM_VERSIONING = ON . Güncelleştirilebilir kayıt defteri tablosu da sistem sürümüne sahip bir tablo olmalıdır. Ancak güncelleştirilebilir bir kayıt defteri tablosunun zamansal tablo olması gerekmez (parametresi gerekmez PERIOD FOR SYSTEM_TIME ). Geçmiş tablosu ve LEDGER = ONile SYSTEM_VERSIONING = ON belirtilirse, var olan bir tabloya başvurmamalıdır.

Kayıt defteri veritabanı (seçeneğiyle LEDGER = ON oluşturulan bir veritabanı), yalnızca kayıt defteri tablolarının oluşturulmasına izin verir. ile LEDGER = OFF tablo oluşturma girişimleri hataya neden olur. Her yeni tablo, belirtmeseniz LEDGER = ONbile varsayılan olarak güncelleştirilebilir bir kayıt defteri tablosu olarak oluşturulur ve diğer tüm parametreler için varsayılan değerlerle oluşturulur.

Güncelleştirilebilir kayıt defteri tablosu, aşağıdaki bağımsız değişkenlerin her biriyle tanımlanan tam olarak bir sütun olmak üzere dört GENERATED ALWAYS sütun içermelidir:

  • GENERATED ALWAYS AS TRANSACTION_ID START
  • GENERATED ALWAYS AS TRANSACTION_ID END
  • GENERATED ALWAYS AS SEQUENCE_NUMBER START
  • GENERATED ALWAYS AS SEQUENCE_NUMBER END

Yalnızca ekleme kayıt defteri tablosu, aşağıdaki bağımsız değişkenlerin her biriyle tanımlanan tam olarak bir sütun içermelidir:

  • GENERATED ALWAYS AS TRANSACTION_ID START
  • GENERATED ALWAYS AS SEQUENCE_NUMBER START

Gerekli her zaman oluşturulan sütunlardan herhangi biri deyiminde CREATE TABLE tanımlanmamışsa ve deyimi içeriyorsa LEDGER = ON, sistem aşağıdaki listeden geçerli bir sütun tanımı kullanarak sütunu otomatik olarak eklemeyi dener. Önceden tanımlanmış bir sütunla bir ad çakışması varsa, sistem bir hata oluşturur.

[ledger_start_transaction_id] BIGINT GENERATED ALWAYS AS TRANSACTION_ID START HIDDEN NOT NULL
[ledger_end_transaction_id] BIGINT GENERATED ALWAYS AS TRANSACTION_ID END HIDDEN NULL
[ledger_start_sequence_number] BIGINT GENERATED ALWAYS AS SEQUENCE_NUMBER START HIDDEN NOT NULL
[ledger_end_sequence_number] BIGINT GENERATED ALWAYS AS SEQUENCE_NUMBER END HIDDEN NULL

<ledger_view_option>, sistemin otomatik olarak oluşturduğu şemayı ve kayıt defteri görünümünün adını belirtir ve tabloya bağlanır. Seçenek belirtilmezse, sistem oluşturulmakta_Ledger olan tablonun () adına ekleyerek database_name.schema_name.table_name genel muhasebe görünümü adını oluşturur. Belirtilen veya oluşturulan ada sahip bir görünüm varsa, sistem bir hata oluşturur. Tablo güncelleştirilebilir bir kayıt defteri tablosuysa, genel muhasebe görünümü tabloda ve geçmiş tablosunda birleşim olarak oluşturulur.

Kayıt defteri görünümündeki her satır, genel muhasebe tablosundaki satır sürümünün oluşturulmasını veya silinmesini temsil eder. Genel muhasebe görünümü, yukarıda listelenen her zaman oluşturulan sütunlar dışında kayıt defteri tablosunun tüm sütunlarını içerir. Kayıt defteri görünümü aşağıdaki ek sütunları da içerir:

Sütun adı Veri türü Açıklama
seçeneği kullanılarak belirtilir TRANSACTION_ID_COLUMN_NAME . ledger_transaction_id belirtilmezse. bigint Satır sürümünü oluşturan veya silen işlemin kimliği.
seçeneği kullanılarak belirtilir SEQUENCE_NUMBER_COLUMN_NAME . ledger_sequence_number belirtilmezse. bigint Tablodaki işlem içindeki satır düzeyi işlemin sıra numarası.
seçeneği kullanılarak belirtilir OPERATION_TYPE_COLUMN_NAME . ledger_operation_type belirtilmezse. tinyint İçerir 1 (INSERT) veya 2 (DELETE). Kayıt defteri tablosuna satır eklemek, kayıt defteri görünümünde bu sütunu içeren 1 yeni bir satır oluşturur. Genel muhasebe tablosundan bir satır silindiğinde, genel muhasebe görünümünde bu sütunu içeren 2 yeni bir satır elde edin. Genel muhasebe tablosundaki bir satırın güncelleştirilmesi, genel muhasebe görünümünde iki yeni satır oluşturur. Bir satırda 2 (DELETE) ve diğer satırda (1) bu sütunda yer alır INSERT .
seçeneği kullanılarak belirtilir OPERATION_TYPE_DESC_COLUMN_NAME . ledger_operation_type_desc belirtilmezse. nvarchar(128) veya INSERTiçerirDELETE. Ayrıntılar için yukarıya bakın.

Kayıt defteri tablosu oluşturmayı içeren hareketler sys.database_ledger_transactions yakalanır.

< >ledger_option ::=

Kayıt defteri seçeneğini belirtir.

[ LEDGER_VIEW = schema_name. ledger_view_name [ ( <ledger_view_option> [ ,... n ] ) ]

Genel muhasebe görünümünün adını ve sistemin kayıt defteri görünümüne eklediği ek sütunların adlarını belirtir.

[ APPEND_ONLY = ON | KAPALI ]

Oluşturulan genel muhasebe tablosunun yalnızca eklenip eklenmeyeceğini veya güncelleştirilebilir olup olmadığını belirtir. Varsayılan değer: OFF.

< >ledger_view_option ::=

Bir veya daha fazla kayıt defteri görünümü seçeneğini belirtir. Kayıt defteri görünümü seçeneğinin her biri bir sütunun adını belirtir; sistem, genel muhasebe tablosunda tanımlanan sütunlara ek olarak görünüme ekler.

[ TRANSACTION_ID_COLUMN_NAME = transaction_id_column_name ]

Satır sürümünü oluşturan veya silen işlemin kimliğini depolayan sütunun adını belirtir. Varsayılan sütun adıdır ledger_transaction_id.

[ SEQUENCE_NUMBER_COLUMN_NAME = sequence_number_column_name ]

Tablodaki işlem içinde satır düzeyi işlemin sıra numarasını depolayarak sütunların adını belirtir. Varsayılan sütun adıdır ledger_sequence_number.

[ OPERATION_TYPE_COLUMN_NAME = operation_type_id column_name ]

İşlem türü kimliğini depolayarak sütunların adını belirtir. Varsayılan sütun adı ledger_operation_type.

[ OPERATION_TYPE_DESC_COLUMN_NAME = operation_type_desc_column_name ]

İşlem türü açıklamasını depolayarak sütunların adını belirtir. Varsayılan sütun adıdır ledger_operation_type_desc.

Açıklamalar

İzin verilen tablo, sütun, kısıtlama ve dizin sayısı hakkında bilgi için bkz. SQL Server için Maksimum Kapasite Belirtimleri.

Alan genellikle tablolara ve dizinlere bir kerede bir ölçüde artışlarla ayrılır. SET MIXED_PAGE_ALLOCATION seçeneği ALTER DATABASE TRUE olarak ayarlandığında veya her zaman SQL Server 2016'dan (13.x) önce olduğunda, tablo veya dizin oluşturulduğunda, tekdüzen bir kapsamı doldurmak için yeterli sayfaya sahip olana kadar karma uzantılardan sayfalar ayrılır. Tekdüzen bir kapsamı doldurmak için yeterli sayfaya sahip olduktan sonra, o anda ayrılmış olan kapsamlar her dolduğunda başka bir kapsam ayrılır. Tablo tarafından ayrılan ve kullanılan alan miktarı hakkında bir rapor için komutunu yürütebilirsiniz sp_spaceused.

Veritabanı Altyapısı, bir sütun tanımında DEFAULT, IDENTITY, ROWGUIDCOL veya sütun kısıtlamalarının belirtildiği bir sırayı zorlamaz.

Tablo oluşturulduğunda, tablo oluşturulduğunda seçenek KAPALI olarak ayarlansa bile, QUOTED IDENTIFIER seçeneği her zaman tablonun meta verilerinde ON olarak depolanır.

Microsoft Fabric'teki SQL veritabanında bazı tablo özellikleri oluşturulabilir ancak Fabric OneLakeyansıtılmaz. Daha fazla bilgi için bkz.Doku SQL veritabanı yansıtma sınırlamaları .

Geçici tablolar

Yerel ve genel geçici tablolar oluşturabilirsiniz. Yerel geçici tablolar yalnızca geçerli oturumda görünür ve genel geçici tablolar tüm oturumlar tarafından görülebilir. Geçici tablolar bölümlenemez.

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

Transact-SQL deyimleri, deyimdeki table_name için belirtilen değeri kullanarak geçici tabloya CREATE TABLE başvurur, örneğin:

CREATE TABLE #MyTempTable
(
    col1 INT PRIMARY KEY
);

INSERT INTO #MyTempTable
VALUES (1);

Tek bir saklı yordam veya toplu işlem içinde birden fazla geçici tablo oluşturulduysa, farklı adlara sahip olmaları gerekir.

Geçici bir tablo oluştururken veya bu tabloya erişirken bir schema_name eklerseniz, bu durum yoksayılır. Tüm geçici tablolar şemada dbo oluşturulur.

Bir saklı yordamda veya birkaç oturum tarafından aynı anda yürütülebilen bir SQL modülünde yerel geçici tablo oluşturulursa, Veritabanı Altyapısı'nın farklı oturumlar tarafından oluşturulan tabloları ayırt edebilmesi gerekir. Veritabanı Altyapısı bunu, her yerel geçici tablo adına dahili olarak benzersiz bir sonek ekleyerek yapar. geçici tablonun içinde depolandığı sys.objectstempdb şekilde tam adı, deyiminde CREATE TABLE belirtilen tablo adından ve sistem tarafından oluşturulan benzersiz son ekten oluşur. Son eke izin vermek için, yerel geçici ad için belirtilen table_name 116 karakteri aşamaz.

Geçici tablolar, daha önce kullanılarak DROP TABLEaçıkça bırakılmadığı sürece kapsam dışına çıktığında otomatik olarak bırakılır:

  • Saklı yordam tamamlandığında saklı yordamda oluşturulan yerel geçici tablo otomatik olarak bırakılır. Tabloya, tabloyu oluşturan saklı yordam tarafından yürütülen iç içe yerleştirilmiş saklı yordamlar tarafından başvurulabilir. Tabloyu oluşturan saklı yordamı çağıran işlem tabloya başvuramaz.
  • Diğer tüm yerel geçici tablolar geçerli oturumun sonunda otomatik olarak bırakılır.
  • GLOBAL_TEMPORARY_TABLE_AUTO_DROP Veritabanı kapsamlı yapılandırma AÇLIK (varsayılan) olarak ayarlanırsa, tabloyu oluşturan oturum sona erdiğinde ve diğer tüm görevler bunlara başvurmayı durdurduğunda genel geçici tablolar otomatik olarak bırakılır. Görev ve tablo arasındaki ilişki yalnızca tek bir Transact-SQL deyiminin ömrü boyunca korunur. Bu, oluşturma oturumu sona erdiğinde tabloya etkin olarak başvuran son Transact-SQL deyiminin tamamlanması sırasında genel bir geçici tablonun bırakıldığı anlamına gelir.
  • GLOBAL_TEMPORARY_TABLE_AUTO_DROP Veritabanı kapsamlı yapılandırma KAPALI olarak ayarlanırsa, genel geçici tablolar yalnızca kullanılarak DROP TABLEveya Veritabanı Altyapısı örneği yeniden başlatıldığında bırakılır. Daha fazla bilgi için bkz. GLOBAL_TEMPORARY_TABLE_AUTO_DROP.

Saklı yordam veya tetikleyici içinde oluşturulan yerel geçici tablo, saklı yordam veya tetikleyici çağrılmadan önce oluşturulan geçici tabloyla aynı ada sahip olabilir. Ancak, bir sorgu geçici bir tabloya başvuruyorsa ve o sırada aynı ada sahip iki geçici tablo varsa, sorgunun hangi tabloya karşı çözümlendiği tanımlanmamıştır. İç içe saklı yordamlar, çağrılan saklı yordam tarafından oluşturulan geçici bir tabloyla aynı ada sahip geçici tablolar da oluşturabilir. Ancak, iç içe yordamda oluşturulan tabloya yönelik değişikliklerin çözümlenmesi için, tablonun, çağırma yordamında oluşturulan tabloyla aynı sütun adlarıyla aynı yapıya sahip olması gerekir. 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 x AS Test2Col
FROM #t;
GO

CREATE PROCEDURE dbo.Test1
AS
CREATE TABLE #t
(
    x INT PRIMARY KEY
);

INSERT INTO #t
VALUES (1);
SELECT x AS Test1Col
FROM #t;

EXECUTE Test2;
GO

CREATE TABLE #t
(
    x INT PRIMARY KEY
);

INSERT INTO #t
VALUES (99);
GO

EXECUTE Test1;
GO

Sonuç kümesi aşağıdadır.

(1 row(s) affected)
Test1Col
-----------
1

(1 row(s) affected)
Test2Col
-----------
2

Yerel veya genel geçici tablolar oluşturduğunuzda, CREATE TABLE söz dizimi kısıtlamalar dışında FOREIGN KEY kısıtlama tanımlarını destekler. Geçici bir tabloda bir FOREIGN KEY kısıtlama belirtilirse, deyimi kısıtlamanın atlandığını belirten bir uyarı iletisi döndürür. Tablo yine de kısıtlama olmadan FOREIGN KEY oluşturulur. Geçici tablolara kısıtlamalarda FOREIGN KEY başvurulamazsınız.

Adlandırılmış kısıtlama ile geçici bir tablo oluşturuluyorsa ve geçici tablo kullanıcı tanımlı bir işlem kapsamında oluşturuluyorsa, geçici tabloyu oluşturan deyimi aynı anda birden fazla kullanıcı yürütemez. Örneğin, saklı yordam adlandırılmış birincil anahtar kısıtlaması olan geçici bir tablo oluşturursa, saklı yordam birden çok kullanıcı tarafından aynı anda yürütülemez.

Azure SQL Veritabanı'nda veritabanı kapsamlı genel geçici tablolar

SQL Server'daki genel geçici tablolar (ön ekli ##tablo adları) tüm SQL Server örneğindeki tempdb tüm kullanıcı oturumlarında depolanır ve bunlar arasında paylaşılır.

Azure SQL Veritabanı, içinde tempdb depolanan ancak kapsamı veritabanı düzeyinde olan genel geçici tabloları destekler. Bu, genel geçici tabloların aynı veritabanındaki tüm kullanıcı oturumları arasında paylaştırıldığını gösterir. Diğer veritabanlarındaki kullanıcı oturumları genel geçici tablolara erişemez. Aksi takdirde, Azure SQL Veritabanı için genel geçici tablolar SQL Server'ın kullandığı söz dizimini ve semantiği izler.

Benzer şekilde, genel geçici saklı yordamların kapsamı da Azure SQL Veritabanı'ndaki veritabanı düzeyine göre belirlenir.

Yerel geçici tablolar (ön ekli #tablo adları) Azure SQL Veritabanı için de desteklenir ve SQL Server'ın kullandığı söz dizimini ve semantiği izler. Daha fazla bilgi için bkz . Geçici tablolar.

Geçici nesneler için izinler

Herhangi bir kullanıcı geçici nesneler oluşturabilir ve bu nesnelere erişebilir.

Bölümlenmiş tablolar

CREATE TABLE kullanarak bölümlenmiş tablo oluşturmadan önce, tablonun nasıl bölümleneceğini belirtmek için bir bölüm işlevi oluşturmanız gerekir. CREATE PARTITION FUNCTION kullanılarak bir bölüm işlevi oluşturulur. İkincisi, bölüm işlevi tarafından belirtilen bölümleri tutacak dosya gruplarını belirtmek için bir bölüm düzeni oluşturmanız gerekir. CREATE PARTITION SCHEME kullanılarak bir bölüm düzeni oluşturulur. Bölümlenmiş tablolar için birincil anahtar veya BENZERSIZ kısıtlamaların ayrı dosya gruplarına yerleştirilmesi belirtilemiyor. Daha fazla bilgi için bkz. bölümlenmiş tablolar ve dizinler .

BİRİnCİl ANAHTAR kısıtlamaları

  • Tablo yalnızca bir BİRİnCİl ANAHTAR kısıtlaması içerebilir.

  • BİrİnCİl ANAHTAR kısıtlaması tarafından oluşturulan dizin, tablodaki dizin sayısının 999 kümelenmemiş dizini ve 1 kümelenmiş dizini aşmasına neden olamaz.

  • BİrİnCİl ANAHTAR kısıtlaması için CLUSTERED veya NONCLUSTERED belirtilmemişse, UNIQUE kısıtlamaları için kümelenmiş dizin belirtilmediğinde CLUSTERED kullanılır.

  • BİrİnCİl ANAHTAR kısıtlaması içinde tanımlanan tüm sütunlar NOT NULL olarak tanımlanmalıdır. Null atanabilirlik belirtilmezse, BİRİnCİl ANAHTAR kısıtlamasına katılan tüm sütunların null atanabilirlik değeri NOT NULL olarak ayarlanır.

    Uyarı

    Bellek için iyileştirilmiş tablolar için null atanabilir anahtar sütununa izin verilir.

  • Birincil anahtar CLR kullanıcı tanımlı tür sütununda tanımlanmışsa, türün uygulanması ikili sıralamayı desteklemelidir. Daha fazla bilgi için bkz. CLR Kullanıcı Tanımlı Türler.

BENZERSİz kısıtlamalar

  • UNIQUE kısıtlaması için CLUSTERED veya NONCLUSTERED belirtilmemişse, NONCLUSTERED varsayılan olarak kullanılır.
  • Her UNIQUE kısıtlaması bir dizin oluşturur. BENZERSİz kısıtlamaların sayısı, tablodaki dizin sayısının 999 kümelenmemiş dizini ve 1 kümelenmiş dizini aşmasına neden olamaz.
  • CLR kullanıcı tanımlı tür sütununda benzersiz bir kısıtlama tanımlanmışsa, türün uygulanması ikili veya işleç tabanlı sıralamayı desteklemelidir. Daha fazla bilgi için bkz. CLR Kullanıcı Tanımlı Türler.

YABANCI ANAHTAR kısıtlamaları

  • YABANCı ANAHTAR kısıtlamasının sütununa NULL dışında bir değer girildiğinde, değer başvuruda bulunmalıdır; aksi takdirde, yabancı anahtar ihlali hata iletisi döndürülür.

  • Yabancı ANAHTAR kısıtlamaları, kaynak sütunlar belirtilmediği sürece önceki sütuna uygulanır.

  • YABANCI ANAHTAR kısıtlamaları yalnızca aynı sunucudaki aynı veritabanındaki tablolara başvurabilir. Veritabanları arası bilgi tutarlılığı tetikleyiciler aracılığıyla uygulanmalıdır. Daha fazla bilgi için bkz. CREATE TRIGGER.

  • FOREIGN KEY kısıtlamaları aynı tablodaki başka bir sütuna başvurabilir. Bu, kendi kendine başvuru olarak adlandırılır.

  • Sütun düzeyinde YABANCı ANAHTAR kısıtlamasının REFERENCES yan tümcesi yalnızca bir başvuru sütununu listeleyebilir. Bu sütun, kısıtlamanın tanımlandığı sütunla aynı veri türüne sahip olmalıdır.

  • Tablo düzeyinde YABANCı ANAHTAR kısıtlamasının REFERENCES yan tümcesi, kısıtlama sütun listesindeki sütun sayısıyla aynı sayıda başvuru sütununa sahip olmalıdır. Her başvuru sütununun veri türü de sütun listesindeki ilgili sütunla aynı olmalıdır. Başvuru sütunları, başvuruda bulunulan tabloda birincil anahtarın veya benzersiz kısıtlamanın sütunları belirtilirken kullanılan sırada belirtilmelidir.

  • Zaman damgası türünde bir sütun yabancı anahtarın veya başvurulan anahtarın parçasıysa CASCADE, SET NULL veya SET DEFAULT belirtilemiyor.

  • CASCADE, SET NULL, SET DEFAULT ve NO ACTION, birbiriyle bilgi ilişkisi olan tablolarda birleştirilebilir. Veritabanı Altyapısı EYLEM YOK ile karşılaşırsa ilgili CASCADE, SET NULL ve SET DEFAULT eylemlerini durdurur ve geri alır. DELETE deyimi CASCADE, SET NULL, SET DEFAULT ve NO ACTION eylemlerinin bir bileşimine neden olduğunda, Veritabanı Altyapısı HERHANGI BIR EYLEM YOK demeden önce tüm CASCADE, SET NULL ve SET DEFAULT eylemleri uygulanır.

  • Veritabanı Altyapısı, bir tablonun diğer tablolara başvuran YABANCı ANAHTAR kısıtlamalarının sayısı veya belirli bir tabloya başvuran diğer tabloların sahip olduğu YABANCı ANAHTAR kısıtlamalarının sayısı üzerinde önceden tanımlanmış bir sınıra sahip değildir.

    Bununla birlikte, kullanılabilecek YABANCı ANAHTAR kısıtlamalarının gerçek sayısı donanım yapılandırması ve veritabanı ve uygulamanın tasarımı ile sınırlıdır. Bir tabloya en fazla 253 YABANCı ANAHTAR kısıtlaması içermesini ve en fazla 253 YABANCı ANAHTAR kısıtlaması tarafından başvurulmalarını öneririz. Uygulama ve donanıma bağlı olarak sizin için geçerli sınır az çok olabilir. Veritabanınızı ve uygulamalarınızı tasarlarken YABANCI ANAHTAR kısıtlamaları uygulama maliyetini göz önünde bulundurun.

  • FOREIGN KEY kısıtlamaları geçici tablolarda uygulanmaz.

  • YABANCI ANAHTAR kısıtlamaları yalnızca başvuruda bulunan tablodaki BİRİnCİl ANAHTAR veya BENZERSİz kısıtlamalarındaki sütunlara veya başvuruda bulunan tablodaki BENZERSİz İnDİS'e başvurabilir.

  • ClR kullanıcı tanımlı tür sütununda yabancı anahtar tanımlanmışsa, türün uygulanması ikili sıralamayı desteklemelidir. Daha fazla bilgi için bkz. CLR Kullanıcı Tanımlı Türler.

  • Yabancı anahtar ilişkisine katılan sütunlar aynı uzunlukta ve ölçekle tanımlanmalıdır.

DEFAULT tanımları

  • Bir sütunda yalnızca bir DEFAULT tanımı olabilir.

  • DEFAULT tanımı sabit değerler, işlevler, SQL standart niladic işlevleri veya NULLiçerebilir. Aşağıdaki tabloda niladic işlevleri ve INSERT deyimi sırasında varsayılan değer için döndürdikleri değerler gösterilmektedir.

    SQL-92 niladic işlevi Döndürülen değer
    CURRENT_TIMESTAMP Geçerli tarih ve saat.
    CURRENT_USER Ekleme gerçekleştiren kullanıcının adı.
    SESSION_USER Ekleme gerçekleştiren kullanıcının adı.
    SYSTEM_USER Ekleme gerçekleştiren kullanıcının adı.
    USER Ekleme gerçekleştiren kullanıcının adı.
  • DEFAULT tanımındaki constant_expression tablodaki başka bir sütuna veya diğer tablolara, görünümlere veya saklı yordamlara başvuramaz.

  • DEFAULT tanımları , zaman damgası veri türüne sahip sütunlarda veya IDENTITY özelliğine sahip sütunlarda oluşturulamaz.

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

CHECK kısıtlamaları

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

  • Arama koşulu bir Boole ifadesi olarak değerlendirilmelidir ve başka bir tabloya başvuramaz.

  • Sütun düzeyi CHECK kısıtlaması yalnızca kısıtlanmış sütuna, tablo düzeyinde check kısıtlaması ise yalnızca aynı tablodaki sütunlara başvurabilir.

    CHECK CONSTRAINTS ve rules, INSERT ve UPDATE deyimleri sırasında verileri doğrulama işlevine sahiptir.

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

  • CHECK kısıtlamaları metin, ntext veya görüntü sütunlarında tanımlanamaz.

Diğer kısıtlama bilgileri

  • Bir kısıtlama için oluşturulan dizin kullanılarak DROP INDEXbırakılamaz; kısıtlama kullanılarak ALTER TABLEbırakılmalıdır. için oluşturulan ve bir kısıtlama tarafından kullanılan bir dizin kullanılarak ALTER INDEX ... REBUILDyeniden oluşturulabilir. Daha fazla bilgi için bkz. Dizinleri Yeniden Düzenleme ve Yeniden Derleme.
  • Kısıtlama adları , tanımlayıcıların kurallarına uymalıdır, ancak ad bir sayı işaretiyle (#) başlayamaz. constraint_name sağlanmazsa, kısıtlamaya sistem tarafından oluşturulan bir ad atanır. Kısıtlama adı, kısıtlama ihlalleriyle ilgili herhangi bir hata iletisinde görünür.
  • bir , INSERTveya UPDATE deyiminde DELETEbir kısıtlama ihlal edildiğinde, deyimi sonlandırılır. Ancak OFF SET XACT_ABORT olarak ayarlandığında, deyim açık bir işlemin parçasıysa işlem işlemeye devam eder. SET XACT_ABORT ON olarak ayarlandığında, tüm işlem geri alınır. Sistem işlevini denetleyerek ROLLBACK TRANSACTION deyimini işlem tanımıyla da kullanabilirsiniz@@ERROR.
  • Dizine eriştiğinde ALLOW_ROW_LOCKS = ON ve ALLOW_PAGE_LOCK = ON, satır, sayfa ve tablo düzeyinde kilitlere izin verildiğinde. Veritabanı Altyapısı uygun kilidi seçer ve kilidi bir satırdan veya sayfa kilidinden tablo kilidine yükseltebilir. ve ALLOW_ROW_LOCKS = OFFolduğundaALLOW_PAGE_LOCK = OFF, dizine eriştiğiniz zaman yalnızca tablo düzeyinde bir kilide izin verilir.
  • Bir tabloda YABANCı ANAHTAR veya CHECK CONSTRAINTS ve tetikleyicileri varsa, kısıtlama koşulları tetikleyici yürütülmeden önce değerlendirilir.

Tablodaki ve sütunlarındaki bir rapor için veya sp_helpkullanınsp_helpconstraint. Tabloyu yeniden adlandırmak için kullanın sp_rename. Tabloya bağlı görünümler ve saklı yordamlar hakkında bir rapor için sys.dm_sql_referenced_entities ve sys.dm_sql_referencing_entities kullanın.

Tablo tanımı içinde null atanabilirlik kuralları

Sütunun null atanabilirliği, sütunun bu sütundaki veriler olarak null değere (NULL) izin verip veremeyeceğini belirler. NULL sıfır veya boş değildir: NULL hiçbir giriş yapılmadığı veya açık NULL bir değer sağlanmadığı anlamına gelir ve genellikle değerin bilinmediği veya geçerli olmadığı anlamına gelir.

Tablo oluşturmak veya değiştirmek için veya CREATE TABLE kullandığınızdaALTER TABLE, veritabanı ve oturum ayarları sütun tanımında kullanılan veri türünün null atanabilirliğini etkiler ve geçersiz kılar. Bir sütunu her zaman uyumsuz sütunlar için NULL veya NOT NULL olarak tanımlamanızı veya kullanıcı tanımlı bir veri türü kullanıyorsanız, sütunun veri türünün varsayılan null atanabilirliğini kullanmasına izin vermenizi öneririz. Seyrek sütunlar her zaman NULL'a izin vermelidir.

Sütun null atanabilirliği açıkça belirtilmediğinde, sütun null atanabilirliği aşağıdaki tabloda gösterilen kurallara uyar.

Sütun veri türü Kural
Diğer ad veri türü Veritabanı Altyapısı, veri türü oluşturulduğunda belirtilen null atanabilirliği kullanır. Veri türünün varsayılan null atanabilirliğini belirlemek için kullanın sp_help.
CLR kullanıcı tanımlı tür Null atanabilirlik, sütun tanımına göre belirlenir.
Sistem tarafından sağlanan veri türü Sistem tarafından sağlanan veri türünün tek bir seçeneği varsa öncelik kazanır. zaman damgası veri türleri NULL DEĞİl olmalıdır. kullanarak SETherhangi bir oturum ayarı ON olarak ayarlandığında:
ANSI_NULL_DFLT_ON = ON, NULL atanır.
ANSI_NULL_DFLT_OFF = ON, NOT NULL atanır.

herhangi bir veritabanı ayarı kullanılarak ALTER DATABASEyapılandırıldığında:
ANSI_NULL_DEFAULT_ON = ON, NULL atanır.
ANSI_NULL_DEFAULT_OFF = ON, NOT NULL atanır.

için veritabanı ayarını görüntülemek için ANSI_NULL_DEFAULTkatalog görünümünü kullanın sys.databases

Oturum için ANSI_NULL_DFLT seçeneklerinden hiçbiri ayarlanmadığında ve veritabanı varsayılan olarak ayarlandığında (ANSI_NULL_DEFAULT KAPALI olduğunda), varsayılan NOT NULL değeri atanır.

Sütun hesaplanan bir sütunsa, null atanabilirliği her zaman Veritabanı Altyapısı tarafından otomatik olarak belirlenir. Bu tür bir sütunun null atanabilirliğini bulmak için COLUMNPROPERTY özelliğiyle işlevini kullanın.

Uyarı

SQL Server ODBC sürücüsü ve SQL Server OLE DB sürücüsünün her ikisi de varsayılan olarak ANSI_NULL_DFLT_ON AÇıK olarak ayarlanır. ODBC ve OLE DB kullanıcıları bunu ODBC veri kaynaklarında veya uygulama tarafından ayarlanan bağlantı öznitelikleri veya özelliklerle yapılandırabilir.

Veri sıkıştırma

Sistem tabloları sıkıştırma için etkinleştirilemiyor. Tablo oluştururken, aksi belirtilmedikçe veri sıkıştırma NONE olarak ayarlanır. Bölümlerin listesini veya aralık dışında olan bir bölümü belirtirseniz bir hata oluşturulur. Veri sıkıştırma hakkında daha fazla bilgi için bkz. Veri Sıkıştırma.

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

İzinler

CREATE TABLE Veritabanında izin ve ALTER tablonun oluşturulduğu şema üzerinde izin gerektirir.

Deyimindeki CREATE TABLE herhangi bir sütun kullanıcı tanımlı türde olacak şekilde tanımlanmışsa, REFERENCES kullanıcı tanımlı tür üzerinde izin gereklidir.

Deyimindeki CREATE TABLE herhangi bir sütun CLR kullanıcı tanımlı türünde olacak şekilde tanımlanmışsa, türün sahipliği veya REFERENCES üzerindeki izin gereklidir.

Deyimindeki CREATE TABLE herhangi bir sütunla ilişkilendirilmiş bir XML şema koleksiyonu varsa, XML şema koleksiyonunun sahipliği veya REFERENCES üzerindeki izin gereklidir.

Herhangi bir kullanıcı içinde tempdbgeçici tablolar oluşturabilir.

Ekstre bir kayıt defteri tablosu oluşturuyorsa, ENABLE LEDGER izin gereklidir.

Örnekler

A. Sütunda BİrİnCİl ANAHTAR kısıtlaması oluşturma

Aşağıdaki örnekte, tablonun sütununda kümelenmiş dizine EmployeeID sahip bİrİnCİl ANAHTAR kısıtlamasının sütun tanımı gösterilmektedir Employee . Bir kısıtlama adı belirtilmediğinden, sistem kısıtlama adını sağlar.

CREATE TABLE dbo.Employee
(
    EmployeeID INT PRIMARY KEY CLUSTERED
);

B. YABANCI ANAHTAR kısıtlamalarını kullanma

Yabancı ANAHTAR kısıtlaması, başka bir tabloya başvurmak için kullanılır. Yabancı anahtarlar tek sütunlu anahtarlar veya çok sütunlu anahtarlar olabilir. Aşağıdaki örnekte tabloya SalesOrderHeader başvuran tek sütunlu YABANCı ANAHTAR kısıtlaması gösterilmektedir SalesPerson . Tek sütunlu FOREIGN KEY kısıtlaması için yalnızca REFERENCES yan tümcesi gereklidir.

SalesPersonID INT NULL REFERENCES SalesPerson(SalesPersonID)

AYRıCA FOREIGN KEY yan tümcesini açıkça kullanabilir ve sütun özniteliğini yeniden ifade edebilirsiniz. Sütun adının her iki tabloda da aynı olması gerekmez.

FOREIGN KEY (SalesPersonID) REFERENCES SalesPerson(SalesPersonID)

Çok sütunlu anahtar kısıtlamaları tablo kısıtlamaları olarak oluşturulur. AdventureWorks2022 Veritabanında, SpecialOfferProduct tablo çok sütunlu bİrİnCİl ANAHTAR içerir. Aşağıdaki örnekte bu anahtara başka bir tablodan nasıl başvuracakları gösterilmektedir; açık bir 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

UNIQUE kısıtlamaları, ayrıcalıksız anahtar sütunlarında benzersizliği zorlamak için kullanılır. Aşağıdaki örnek, tablonun sütununun NameProduct benzersiz olması gereken bir kısıtlama uygular.

Name NVARCHAR(100) NOT NULL
UNIQUE NONCLUSTERED

D. DEFAULT tanımlarını kullanma

Hiçbir değer sağlanmadığında varsayılan değerler bir değer (INSERT ve UPDATE deyimleriyle) sağlar. Örneğin, veritabanı çalışanların AdventureWorks2022 şirketi doldurabileceği farklı işleri listeleyen bir arama tablosu içerebilir. Her işi açıklayan bir sütun altında, gerçek bir açıklama açıkça girildiğinde varsayılan olarak bir karakter dizesi açıklama sağlayabilir.

DEFAULT 'New Position - title not formalized yet'

Sabitlere ek olarak, DEFAULT tanımları işlevleri de içerebilir. Bir girişin geçerli tarihini almak için aşağıdaki örneği kullanın.

DEFAULT (GETDATE())

Sıfırdan işlevli tarama, veri bütünlüğünü de iyileştirebilir. Satır ekleyen kullanıcıyı izlemek için KULLANICI için niladic-işlevini kullanın. niladic-functions işlevini parantez içine eklemeyin.

DEFAULT USER

E. CHECK kısıtlamalarını kullanma

Aşağıdaki örnekte, tablonun sütununa CreditRatingVendor girilen değerlerde yapılan bir kısıtlama gösterilmektedir. Kısıtlamanın adı yok.

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

Bu örnekte, bir tablonun sütununa girilen karakter verilerinde desen kısıtlaması olan adlandırılmış kısıtlama gösterilmektedir.

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 örnek, değerlerin belirli bir listede yer alması veya belirtilen deseni izlemesi gerektiğini belirtir.

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

F. Tablo tanımının tamamını gösterme

Aşağıdaki örnekte, veritabanında oluşturulan tablo için tüm kısıtlama tanımlarıyla birlikte tablo PurchaseOrderDetail tanımlarının tamamı gösterilmektedir AdventureWorks2022 . Örneği çalıştırmak için tablo şeması olarak dbodeğiştirilir.

CREATE TABLE dbo.PurchaseOrderDetail
(
    PurchaseOrderID INT NOT NULL FOREIGN KEY REFERENCES Purchasing.PurchaseOrderHeader (PurchaseOrderID),
    LineNumber SMALLINT NOT NULL,
    ProductID INT NULL FOREIGN KEY REFERENCES Production.Product (ProductID),
    UnitPrice MONEY NULL,
    OrderQty SMALLINT NULL,
    ReceivedQty FLOAT NULL,
    RejectedQty FLOAT NULL,
    DueDate DATETIME NULL,
    rowguid UNIQUEIDENTIFIER CONSTRAINT DF_PurchaseOrderDetail_rowguid DEFAULT (NEWID()) ROWGUIDCOL NOT NULL,
    ModifiedDate DATETIME CONSTRAINT DF_PurchaseOrderDetail_ModifiedDate DEFAULT (GETDATE()) NOT NULL,
    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. XML şeması koleksiyonuna yazılan xml sütunuyla tablo oluşturma

Aşağıdaki örnek, XML şema koleksiyonuna xmlyazılan bir sütuna sahip bir HRResumeSchemaCollection tablo oluşturur. anahtar sözcüğü, DOCUMENTxml içindeki veri türünün her örneğinin yalnızca bir üst düzey öğe içerebileceğini belirtir.

CREATE TABLE HumanResources.EmployeeResumes
(
    LName NVARCHAR (25),
    FName NVARCHAR (25),
    Resume XML(DOCUMENT HumanResources.HRResumeSchemaCollection)
);

H. Bölümlenmiş tablo oluşturma

Aşağıdaki örnek, bir tabloyu veya dizini dört bölüme bölmek için bir bölüm işlevi oluşturur. Ardından örnek, dört bölümün her birinin barındırıldığı dosya gruplarını belirten bir bölüm düzeni oluşturur. Son olarak, örnek bölüm düzenini kullanan bir tablo oluşturur. Bu örnekte dosya gruplarının veritabanında zaten var olduğu 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ütununun col1PartitionTabledeğerlerine bağlı olarak bölümler aşağıdaki yollarla atanır.

Dosya Grubu test1fg test2fg test3fg test4fg
Bölümleme 1 2 3 4
Değerler col 1 <= 1 col1 > 1 AND col1 <= 100 col1 > 100 AND col1 <= 1,000 col1 > 1000

Ben. Bir sütunda UNIQUEIDENTIFIER veri türünü kullanma

Aşağıdaki örnek, sütunlu bir uniqueidentifier tablo oluşturur. Örnek, tabloyu yinelenen değerler ek eden kullanıcılara karşı korumak için BİrİnCİl ANAHTAR kısıtlaması kullanır ve yeni satırlar için değer sağlamak için kısıtlamadaki NEWSEQUENTIALID() işlevini kullanırDEFAULT. ROWGUIDCOL özelliği, $ROWGUID anahtar sözcüğü kullanılarak başvurulabilmesi için uniqueidentifier sütuna uygulanır.

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. Hesaplanan sütun için ifade kullanma

Aşağıdaki örnekte hesaplanan sütunu hesaplamak için bir ifadenin ((low + high)/2) kullanımı gösterilmektedir myavg .

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

K. Kullanıcı tanımlı tür sütununu temel alan hesaplanan sütun oluşturma

Aşağıdaki örnek, türün derlemesinin ve türün kendisinin geçerli veritabanında zaten oluşturulduğunu varsayarak, kullanıcı tanımlı tür utf8stringolarak tanımlanan bir sütuna sahip bir tablo oluşturur. İkinci bir sütun temelinde utf8stringtanımlanır ve sütunun değerini hesaplamak için ToString() yöntemini utf8string kullanır.

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 sütundaki USER_NAME()myuser_name işlevini kullanır.

CREATE TABLE dbo.mylogintable
(
    date_in DATETIME,
    user_id INT,
    myuser_name AS USER_NAME()
);

M. FILESTREAM sütunu olan bir tablo oluşturma

Aşağıdaki örnek, sütunu FILESTREAMolan bir Photo tablo oluşturur. Bir tabloda bir veya daha fazla FILESTREAM sütun varsa, tabloda bir ROWGUIDCOL sütun olmalıdır.

CREATE TABLE dbo.EmployeePhoto
(
    EmployeeId INT NOT NULL PRIMARY KEY,
    Photo VARBINARY (MAX) FILESTREAM NULL,
    MyRowGuidColumn UNIQUEIDENTIFIER DEFAULT NEWID() ROWGUIDCOL NOT NULL UNIQUE
);

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

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

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

Ek veri sıkıştırma örnekleri için bkz. Veri Sıkıştırma.

O. XML sıkıştırması kullanan bir tablo oluşturma

için geçerlidir: SQL Server 2022 (16.x) ve sonraki sürümler, Azure SQL Veritabanı ve Azure SQL Yönetilen Örneği.

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

CREATE TABLE dbo.T1
(
    c1 INT,
    c2 XML
)
WITH (XML_COMPRESSION = ON);

P. Seyrek sütunlar ve sütun kümesi içeren bir tablo oluşturma

Aşağıdaki örneklerde seyrek sütunlu bir tablo ve iki seyrek sütun ve sütun kümesi içeren bir tablonun nasıl oluşturulacağı gösterilmektedir. Örneklerde temel söz dizimi kullanılır. Daha karmaşık örnekler için bkz. Seyrek Sütunları Kullanma ve Sütun Kümelerini Kullanma.

Bu örnek, seyrek sütun iç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ı CSetbir sütun kümesi içeren bir tablo oluşturur.

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

Soru: Sistem sürümüne sahip bir disk tabanlı zamana bağlı tablo oluşturma

Şunlar için geçerlidir: SQL Server 2016 (13.x) ve üzeri ve Azure SQL Veritabanı.

Aşağıdaki örneklerde, yeni bir geçmiş tablosuna bağlı bir zamansal tablo oluşturma ve mevcut geçmiş tablosuna bağlı bir zamansal tablo oluşturma gösterilmektedir. Tablonun sistem sürümü oluşturma için etkinleştirilmesi için zamana bağlı tablonun tanımlanmış bir birincil anahtarı olmalıdır. Mevcut bir tabloda sistem sürümü oluşturmanın nasıl ekleneceğini veya kaldırılacağını gösteren örnekler için Bkz. Örnekler'deki Sistem Sürümü Oluşturma. Kullanım örnekleri için bkz. Zamana Bağlı Tablolar.

Bu örnek, yeni bir geçmiş tablosuna bağlı yeni bir zamana bağlı tablo oluşturur.

CREATE TABLE Department
(
    DepartmentNumber CHAR (10) NOT NULL PRIMARY KEY CLUSTERED,
    DepartmentName VARCHAR (50) NOT NULL,
    ManagerID INT NULL,
    ParentDepartmentNumber CHAR (10) NULL,
    ValidFrom DATETIME2 GENERATED ALWAYS AS ROW START HIDDEN NOT NULL,
    ValidTo DATETIME2 GENERATED ALWAYS AS ROW END HIDDEN NOT NULL,
    PERIOD FOR SYSTEM_TIME (ValidFrom, ValidTo)
)
WITH (SYSTEM_VERSIONING = ON);

Bu örnek, var olan bir geçmiş tablosuna bağlı yeni bir zamana bağlı tablo oluşturur.

-- Existing table
CREATE TABLE Department_History
(
    DepartmentNumber CHAR (10) NOT NULL,
    DepartmentName VARCHAR (50) NOT NULL,
    ManagerID INT NULL,
    ParentDepartmentNumber CHAR (10) NULL,
    ValidFrom DATETIME2 NOT NULL,
    ValidTo DATETIME2 NOT NULL
);

-- Temporal table
CREATE TABLE Department
(
    DepartmentNumber CHAR (10) NOT NULL PRIMARY KEY CLUSTERED,
    DepartmentName VARCHAR (50) NOT NULL,
    ManagerID INT NULL,
    ParentDepartmentNumber CHAR (10) NULL,
    ValidFrom DATETIME2 GENERATED ALWAYS AS ROW START HIDDEN NOT NULL,
    ValidTo DATETIME2 GENERATED ALWAYS AS ROW END HIDDEN NOT NULL,
    PERIOD FOR SYSTEM_TIME (ValidFrom, ValidTo)
)
WITH (SYSTEM_VERSIONING = ON (HISTORY_TABLE=dbo.Department_History, DATA_CONSISTENCY_CHECK=ON));

R. Sistem tarafından sürümlenmiş bellek için iyileştirilmiş zamana bağlı tablo oluşturma

Şunlar için geçerlidir: SQL Server 2016 (13.x) ve üzeri ve Azure SQL Veritabanı.

Aşağıdaki örnekte, yeni bir disk tabanlı geçmiş tablosuna bağlı, sistem tarafından sürümlenmiş bellek için iyileştirilmiş bir zamana bağlı tablonun nasıl oluşturulacağı gösterilmektedir.

Bu örnek, yeni bir geçmiş tablosuna bağlı yeni bir zamana bağlı tablo oluşturur.

CREATE SCHEMA History;
GO

CREATE TABLE dbo.Department
(
    DepartmentNumber CHAR (10) NOT NULL PRIMARY KEY NONCLUSTERED,
    DepartmentName VARCHAR (50) NOT NULL,
    ManagerID INT NULL,
    ParentDepartmentNumber CHAR (10) NULL,
    ValidFrom DATETIME2 GENERATED ALWAYS AS ROW START HIDDEN NOT NULL,
    ValidTo DATETIME2 GENERATED ALWAYS AS ROW END HIDDEN NOT NULL,
    PERIOD FOR SYSTEM_TIME (ValidFrom, ValidTo)
)
WITH (MEMORY_OPTIMIZED = ON, DURABILITY = SCHEMA_AND_DATA, SYSTEM_VERSIONING = ON (HISTORY_TABLE=History.DepartmentHistory));

Bu örnek, var olan bir geçmiş tablosuna bağlı yeni bir zamana bağlı tablo oluşturur.

-- Existing table
CREATE TABLE Department_History
(
    DepartmentNumber CHAR (10) NOT NULL,
    DepartmentName VARCHAR (50) NOT NULL,
    ManagerID INT NULL,
    ParentDepartmentNumber CHAR (10) NULL,
    ValidFrom DATETIME2 NOT NULL,
    ValidTo DATETIME2 NOT NULL
);

-- Temporal table
CREATE TABLE Department
(
    DepartmentNumber CHAR (10) NOT NULL PRIMARY KEY CLUSTERED,
    DepartmentName VARCHAR (50) NOT NULL,
    ManagerID INT NULL,
    ParentDepartmentNumber CHAR (10) NULL,
    ValidFrom DATETIME2 GENERATED ALWAYS AS ROW START HIDDEN NOT NULL,
    ValidTo DATETIME2 GENERATED ALWAYS AS ROW END HIDDEN NOT NULL,
    PERIOD FOR SYSTEM_TIME (ValidFrom, ValidTo)
)
WITH (SYSTEM_VERSIONING = ON (HISTORY_TABLE=dbo.Department_History, DATA_CONSISTENCY_CHECK=ON));

S. Şifrelenmiş sütunlarla tablo oluşturma

Aşağıdaki örnek, iki şifreli sütun içeren bir tablo oluşturur. Daha fazla bilgi için bkz. Always Encrypted .

CREATE TABLE Customers
(
    CustName NVARCHAR (60)  ENCRYPTED WITH (
       COLUMN_ENCRYPTION_KEY = MyCEK,
       ENCRYPTION_TYPE = RANDOMIZED,
       ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256'
    ),
    SSN VARCHAR (11) COLLATE Latin1_General_BIN2  ENCRYPTED WITH (
       COLUMN_ENCRYPTION_KEY = MyCEK,
       ENCRYPTION_TYPE = DETERMINISTIC,
       ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256'
    ),
    Age INT NULL
);

T. Satır içi filtrelenmiş dizin oluşturma

Satır içi filtrelenmiş dizine sahip bir tablo oluşturur.

CREATE TABLE t1
(
    c1 INT,
    INDEX IX1 (c1) WHERE c1 > 0
);

U. Satır içi dizin oluşturma

Aşağıda disk tabanlı tablolar için NONCLUSTERED satır içi özelliğinin nasıl kullanılacağı gösterilmektedir:

CREATE TABLE t1
(
    c1 INT,
    INDEX ix_1 NONCLUSTERED (c1)
);

CREATE TABLE t2
(
    c1 INT,
    c2 INT INDEX ix_1 NONCLUSTERED
);

CREATE TABLE t3
(
    c1 INT,
    c2 INT,
    INDEX ix_1 NONCLUSTERED (c1, c2)
);

V. Anonim olarak adlandırılmış bileşik birincil anahtarla geçici bir tablo oluşturma

Anonim olarak adlandırılmış bileşik birincil anahtara sahip bir tablo oluşturur. Bu, her biri ayrı bir oturumdaki iki oturum kapsamlı geçici tablonun kısıtlama için aynı adı kullandığı çalışma zamanı çakışmalarını önlemek için yararlıdır.

CREATE TABLE #tmp
(
    c1 INT,
    c2 INT,
    PRIMARY KEY CLUSTERED ([c1], [c2])
);
GO

Kısıtlamayı açıkça adlandırdığınızda, ikinci oturum aşağıdaki gibi bir hata oluşturur:

Msg 2714, Level 16, State 5, Line 1
There is already an object named 'PK_#tmp' in the database.
Msg 1750, Level 16, State 1, Line 1
Could not create constraint or index. See previous errors.

Sorun, geçici tablo adının benzersiz olmasına rağmen kısıtlama adlarının olmamasından kaynaklanır.

W. Azure SQL Veritabanı'nda genel geçici tabloları kullanma

Oturum A, Azure SQL Veritabanı testdb1'de bir genel geçici tablo ##test oluşturur ve bir satır ekler

CREATE TABLE ##test
(
    a INT,
    b INT
);

INSERT INTO ##test
VALUES (1, 1);

-- Obtain object ID for temp table ##test
SELECT OBJECT_ID('tempdb.dbo.##test') AS 'Object ID';

Sonuç kümesi aşağıdadır.

1253579504

(2) içindeki belirli bir nesne kimliği 1253579504 tempdb için genel geçici tablo adını alma

SELECT name
FROM tempdb.sys.objects
WHERE object_id = 1253579504;

Sonuç kümesi aşağıdadır.

##test

B oturumu Azure SQL Veritabanı testdb1'e bağlanır ve A oturumu tarafından oluşturulan ##test tablosuna erişebilir

SELECT *
FROM ##test;

Sonuç kümesi aşağıdadır.

1, 1

C oturumu, Azure SQL Veritabanı testdb2'deki başka bir veritabanına bağlanır ve testdb1'de oluşturulan ##test erişmek ister. Genel geçici tabloların veritabanı kapsamı nedeniyle bu seçim başarısız oluyor

SELECT *
FROM ##test;

Bu, aşağıdaki hatayı oluşturur:

Msg 208, Level 16, State 0, Line 1
Invalid object name '##test'

Geçerli kullanıcı veritabanı testdb1'den Azure SQL Veritabanı'ndaki tempdb sistem nesnesini adresleme

SELECT *
FROM tempdb.sys.objects;

SELECT *
FROM tempdb.sys.columns;

SELECT *
FROM tempdb.sys.database_files;

X. Tabloda Veri Saklama İlkesi'ni etkinleştirme

Aşağıdaki örnek, veri saklama etkinleştirilmiş ve bir haftalık saklama süresine sahip bir tablo oluşturur. Bu örnek yalnızca Azure SQL Edge için geçerlidir.

CREATE TABLE [dbo].[data_retention_table]
(
    [dbdatetime2] DATETIME2 (7),
    [product_code] INT,
    [value] CHAR (10)
)
WITH (DATA_DELETION = ON ( FILTER_COLUMN = [dbdatetime2], RETENTION_PERIOD = 1 WEEKS ) );

Y. Güncelleştirilebilir kayıt defteri tablosu oluşturma

Aşağıdaki örnek, anonim geçmiş tablosuna (sistem geçmiş tablosunun adını oluşturacak) ve oluşturulan genel muhasebe görünümü adına sahip bir zamansal tablo olmayan güncelleştirilebilir bir kayıt defteri tablosu oluşturur. Gerekli oluşturulan her zaman sütunlarının adları ve kayıt defteri görünümündeki ek sütunlar belirtilmediğinden, sütunlar varsayılan adlara sahip olur.

CREATE SCHEMA [HR];
GO

CREATE TABLE [HR].[Employees]
(
    EmployeeID INT NOT NULL,
    Salary MONEY NOT NULL
)
WITH (SYSTEM_VERSIONING = ON, LEDGER = ON);
GO

Aşağıdaki örnek, anonim bir geçmiş tablosu (sistem tarafından oluşturulan bir adla), oluşturulan kayıt defteri görünümü adı ve oluşturulan her zaman sütunlarının varsayılan adları ve ek kayıt defteri görünümü sütunları ile hem zamansal hem de güncelleştirilebilir bir kayıt defteri tablosu olan bir tablo oluşturur.

CREATE SCHEMA [HR];
GO

CREATE TABLE [HR].[Employees]
(
    EmployeeID INT NOT NULL PRIMARY KEY,
    Salary MONEY NOT NULL,
    ValidFrom DATETIME2 GENERATED ALWAYS AS ROW START HIDDEN NOT NULL,
    ValidTo DATETIME2 GENERATED ALWAYS AS ROW END HIDDEN NOT NULL,
    PERIOD FOR SYSTEM_TIME (ValidFrom, ValidTo)
)
WITH (SYSTEM_VERSIONING = ON, LEDGER = ON);
GO

Aşağıdaki örnek, hem zamansal tablo hem de güncelleştirilebilir bir kayıt defteri tablosu oluşturur ve bu tablo açıkça adlandırılmış geçmiş tablosu, kayıt defteri görünümünün kullanıcı tarafından belirtilen adı ve oluşturulan her zaman sütunlarının kullanıcı tarafından belirtilen adları ve kayıt defteri görünümündeki ek sütunlardır.

CREATE SCHEMA [HR];
GO

CREATE TABLE [HR].[Employees]
(
    EmployeeID INT NOT NULL PRIMARY KEY,
    Salary MONEY NOT NULL,
    StartTransactionId BIGINT GENERATED ALWAYS AS TRANSACTION_ID START HIDDEN NOT NULL,
    EndTransactionId BIGINT GENERATED ALWAYS AS TRANSACTION_ID END HIDDEN NULL,
    StartSequenceNumber BIGINT GENERATED ALWAYS AS SEQUENCE_NUMBER START HIDDEN NOT NULL,
    EndSequenceNumber BIGINT GENERATED ALWAYS AS SEQUENCE_NUMBER END HIDDEN NULL,
    ValidFrom DATETIME2 GENERATED ALWAYS AS ROW START HIDDEN NOT NULL,
    ValidTo DATETIME2 GENERATED ALWAYS AS ROW END HIDDEN NOT NULL,
    PERIOD FOR SYSTEM_TIME (ValidFrom, ValidTo)
)
WITH (SYSTEM_VERSIONING = ON (HISTORY_TABLE=[HR].[EmployeesHistory]), LEDGER = ON (LEDGER_VIEW=[HR].[EmployeesLedger] (TRANSACTION_ID_COLUMN_NAME=TransactionId,SEQUENCE_NUMBER_COLUMN_NAME=SequenceNumber,OPERATION_TYPE_COLUMN_NAME=OperationId,OPERATION_TYPE_DESC_COLUMN_NAME=OperationTypeDescription)));
GO

Aşağıdaki örnek, kayıt defteri görünümünün ve genel muhasebe görünümündeki sütunların oluşturulan adlarını içeren yalnızca ekleme kayıt defteri tablosu oluşturur.

CREATE SCHEMA [AccessControl];
GO

CREATE TABLE [AccessControl].[KeyCardEvents]
(
    EmployeeID INT NOT NULL,
    AccessOperationDescription NVARCHAR (MAX) NOT NULL,
    [Timestamp] DATETIME2 NOT NULL,
    StartTransactionId BIGINT GENERATED ALWAYS AS TRANSACTION_ID START HIDDEN NOT NULL,
    StartSequenceNumber BIGINT GENERATED ALWAYS AS SEQUENCE_NUMBER START HIDDEN NOT NULL
)
WITH (LEDGER = ON (LEDGER_VIEW=[AccessControl].[KeyCardEventsLedger] (TRANSACTION_ID_COLUMN_NAME=TransactionId,SEQUENCE_NUMBER_COLUMN_NAME=SequenceNumber,OPERATION_TYPE_COLUMN_NAME=OperationId,OPERATION_TYPE_DESC_COLUMN_NAME=OperationTypeDescription),APPEND_ONLY= ON));
GO

Aşağıdaki örnek, varsayılan ayarları kullanarak Azure SQL Veritabanı'nda bir kayıt defteri veritabanı ve güncelleştirilebilir bir kayıt defteri tablosu oluşturur. Kayıt defteri veritabanında güncelleştirilebilir bir kayıt defteri tablosu oluşturmak için kullanılması WITH (SYSTEM_VERSIONING = ON, LEDGER = ON);gerekmez.

CREATE DATABASE MyLedgerDB
    (EDITION = 'GeneralPurpose')
    WITH LEDGER = ON;
GO

CREATE SCHEMA [HR];
GO

CREATE TABLE [HR].[Employees]
(
    EmployeeID INT NOT NULL,
    Salary MONEY NOT NULL
);
GO