Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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
a
tamsayı sütunlarıb
varsa, hesaplanan sütuna + b
dizine alınmış olabilir, ancak hesaplanan sütuna + 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 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_ESCALATION
ayarlamayı 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_ON
gibi, için kullanılarak CREATE TABLE
FILESTREAM_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 deyimindeCREATE 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 TABLE
NOT 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,
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 $ROWGUID
sü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 birINSTEAD OF
tetikleyiciON DELETE
varsa tanımlanamaz.Örneğin,
AdventureWorks2022
veritabanındaProductVendor
tablonun tabloylaVendor
bilgi ilişkisi vardır. YabancıProductVendor.BusinessEntityID
anahtar birincil anahtara başvururVendor.BusinessEntityID
.Tablodaki bir satırda bir
DELETE
deyim yürütülürse ve içinVendor
birON DELETE CASCADE
eylem belirtilirse, Veritabanı Altyapısı tablodakiProductVendor.BusinessEntityID
bir veya daha fazla bağımlı satırıProductVendor
denetler. Varsa, tablodakiProductVendor
bağımlı satırlar ve tabloda başvuruda bulunılanVendor
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 eyleminiVendor
ProductVendor
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 NULL
veyaSET DEFAULT
değiştirilen tabloda birINSTEAD OF
tetikleyiciON UPDATE
zaten varsa tanımlanamaz.Örneğin,
AdventureWorks2022
ProductVendor
veritabanında tablonun tabloylaVendor
bir bilgi ilişkisi vardır:ProductVendor.BusinessEntity
yabancı anahtar birincil anahtaraVendor.BusinessEntityID
başvurur.Tablodaki
Vendor
bir satırda bir UPDATE deyimi yürütülürse ve içinProductVendor.BusinessEntityID
bir ON UPDATE CASCADE eylemi belirtilirse, Veritabanı Altyapısı tablodakiProductVendor
bir veya daha fazla bağımlı satırı denetler. Varsa, tablodakiProductVendor
bağımlı satırlar ve tabloda başvuruda bulunılanVendor
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 eyleminiProductVendor
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_DELAY
iliş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 INDEX
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_KEY
görüntülemek için sys.indexeskullanın.
Geriye dönük uyumlu söz diziminde, WITH IGNORE_DUP_KEY
WITH IGNORE_DUP_KEY = ON
eş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 ON
bir 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 = ON
izin verilir.
Uyarı
ile DURABILITY = SCHEMA_ONLY
bir tablo oluşturulduğunda ve READ_COMMITTED_SNAPSHOT
daha sonra kullanılarak ALTER DATABASE
değ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 = ON
ile 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 = ON
bile 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 INSERT iç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.objects
tempdb
ş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 TABLE
açı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ılarakDROP TABLE
veya 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
NULL
iç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 INDEX
bırakılamaz; kısıtlama kullanılarakALTER TABLE
bırakılmalıdır. için oluşturulan ve bir kısıtlama tarafından kullanılan bir dizin kullanılarakALTER INDEX ... REBUILD
yeniden 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 ,
INSERT
veyaUPDATE
deyimindeDELETE
bir kısıtlama ihlal edildiğinde, deyimi sonlandırılır. Ancak OFFSET 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 denetleyerekROLLBACK TRANSACTION
deyimini işlem tanımıyla da kullanabilirsiniz@@ERROR
. - Dizine eriştiğinde
ALLOW_ROW_LOCKS = ON
veALLOW_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. veALLOW_ROW_LOCKS = OFF
olduğ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_help
kullanı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 SET herhangi 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 DATABASE yapı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_DEFAULT katalog 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 tempdb
geç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 Name
Product
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 CreditRating
Vendor
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 dbo
değ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 xml
yazılan bir sütuna sahip bir HRResumeSchemaCollection
tablo oluşturur. anahtar sözcüğü, DOCUMENT
xml
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 col1
PartitionTable
değ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 utf8string
olarak tanımlanan bir sütuna sahip bir tablo oluşturur. İkinci bir sütun temelinde utf8string
tanı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 FILESTREAM
olan 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ı CSet
bir 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
İlgili içerik
- ALTER TABLE
- SÜTUNIÖZELLİĞİ
- İNDİS OLUŞTUR
- GÖRÜNÜM OLUŞTUR
- Veri türleri
- INDEXİ SİL
- sys.dm_sql_referenced_entities
- sys.dm_sql_referencing_entities
- DROP TABLE
- CREATE PARTITION FUNCTION
- BÖLÜM DÜZENI OLUŞTURMA
- CREATE TYPE
- EVENTDATA
- sp_help
- sp_helpconstraint
- sp_rename
- sp_spaceused