CREATE TABLE (Transact-SQL)
A következőkre vonatkozik:SQL Server
Azure SQL Database
Felügyelt Azure SQL-példány
SQL-adatbázis a Microsoft Fabric
Létrehoz egy új táblát az adatbázisban.
Jegyzet
A Microsoft Fabric Warehouse-ra való hivatkozásért látogasson el CREATE TABLE (Fabric Data Warehouse). Az Azure Synapse Analytics and Analytics Platform System (PDW) szolgáltatásra való hivatkozásért látogasson el CREATE TABLE (Azure Synapse Analytics).
Transact-SQL szintaxis konvenciói
Szintaxis beállításai
Gyakori szintaxis
Egyszerű CREATE TABLE szintaxis (gyakori, ha nem használja a beállításokat):
CREATE TABLE
{ database_name.schema_name.table_name | schema_name.table_name | table_name }
( { <column_definition> } [ ,... n ] )
[ ; ]
Teljes szintaxis
Lemezalapú CREATE TABLE szintaxis:
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>
Memóriaoptimalizált táblák szintaxisa
Memóriaoptimalizált CREATE TABLE szintaxis:
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 } ] ) ]
}
Érvek
database_name
Annak az adatbázisnak a neve, amelyben a tábla létrejön. database_name meg kell adnia egy meglévő adatbázis nevét. Ha nincs megadva, database_name alapértelmezett érték az aktuális adatbázisra. Az aktuális kapcsolat bejelentkezéséhez hozzá kell adni egy meglévő felhasználói azonosítót a database_nameáltal megadott adatbázisban, és a felhasználói azonosítónak CREATE TABLE engedélyekkel kell rendelkeznie.
schema_name
Annak a sémának a neve, amelyhez az új tábla tartozik.
table_name
Az új tábla neve. A táblaneveknek azonosítókszabályait kell követnie.
table_name legfeljebb 128 karakter hosszúságú lehet, kivéve a helyi ideiglenes táblázatneveket (az egyetlen számjellel (#
)) előtaggal ellátott neveket, amelyek nem haladhatják meg a 116 karaktert.
AS FileTable
A következővonatkozik: SQL Server 2012 (11.x) és újabb.
Fájltáblaként hozza létre az új táblát. Nem ad meg oszlopokat, mert egy Fájltábla rögzített sémával rendelkezik. További információ: FileTables.
column_name AS computed_column_expression
Egy számított oszlop értékét meghatározó kifejezés. A számított oszlopok olyan virtuális oszlopok, amelyek fizikailag nem vannak tárolva a táblában, kivéve, ha az oszlop a PERSISTED (ÁLLANDÓ) jelöléssel van megjelölve. Az oszlop kiszámítása olyan kifejezésből történik, amely ugyanazon tábla más oszlopait használja. Egy számított oszlop definíciója például a következő lehet: cost AS price * qty
. A kifejezés lehet egy nem megfelelő oszlopnév, állandó, függvény, változó, és ezek bármely kombinációja, amelyet egy vagy több operátor kapcsol össze. A kifejezés nem lehet al lekérdezés, és nem tartalmazhat alias adattípusokat.
A számított oszlopok a következő kivételekkel használhatók a listák, a WHERE záradékok, az ORDER BY záradékok vagy bármely más olyan helyen, ahol a reguláris kifejezések használhatók:
A számított oszlopokat MEGŐRZÖTTként kell megjelölni, hogy részt vehessenek a KÜLFÖLDI KULCS vagy a CHECK korlátozásban.
A számított oszlop használható kulcsoszlopként egy indexben, vagy bármely ELSŐDLEGES KULCS vagy EGYEDI kényszer részeként, ha a számított oszlop értékét determinisztikus kifejezés határozza meg, és az eredmény adattípusa engedélyezett az indexoszlopokban.
Ha például a táblázat egész oszlopokat tartalmaz
a
ésb
, a számított oszlopa + b
indexelhető, de a számított oszlopa + DATEPART(dd, GETDATE())
nem indexelhető, mert az érték a későbbi meghívásokban változhat.A számított oszlop nem lehet az INSERT vagy AZ UPDATE utasítás célja.
Jegyzet
A táblák minden sora különböző értékekkel rendelkezhet a számított oszlopban részt vevő oszlopokhoz; Ezért előfordulhat, hogy a számított oszlop értéke nem azonos az egyes sorokhoz.
A használt kifejezések alapján a számított oszlopok nullságát az adatbázismotor automatikusan meghatározza. A legtöbb kifejezés eredménye akkor is null értékűnek minősül, ha csak a nemnullable oszlopok vannak jelen, mert a lehetséges alulcsordulások vagy túlcsordulások NULL eredményt is eredményeznek. A COLUMNPROPERTY
függvénnyel a AllowsNull tulajdonsággal vizsgálhatja meg a tábla bármely számított oszlopának nullságát. A null értékű kifejezéseket a check_expression konstanssal ISNULL
megadásával lehet nemnullákká alakítani, ahol az állandó bármely NULL-eredményre helyettesíthető nonnull érték. A common language runtime (CLR) felhasználó által definiált típuskifejezéseken alapuló számított oszlopokhoz a REFERENCES engedély szükséges a típushoz.
KITARTOTT
Megadja, hogy az SQL Server adatbázismotor fizikailag tárolja a számított értékeket a táblában, és frissíti az értékeket, amikor a számított oszloptól függő egyéb oszlopok is frissülnek. A számított oszlop PERSISTED
megjelölése lehetővé teszi, hogy egy determinisztikus, de nem pontos számított oszlopon hozzon létre indexet. További információ: Számított oszlopok indexei. A particionált táblák particionálási oszlopaként használt számított oszlopokat explicit módon kell megjelölni PERSISTED
.
computed_column_expression determinisztikusnak kell lennie PERSISTED
megadásakor.
ON { partition_scheme | fájlcsoport | "default" }
Megadja azt a partíciós sémát vagy fájlcsoportot, amelyen a tábla tárolódik. Ha partition_scheme van megadva, a tábla egy particionált tábla, amelynek partícióit egy vagy több, partition_schememegadott fájlcsoport tárolja. Ha fájlcsoport van megadva, a tábla a nevesített fájlcsoportban lesz tárolva. A fájlcsoportnak léteznie kell az adatbázisban. Ha "default"
van megadva, vagy ha egyáltalán nincs bekapcsolva, a tábla az alapértelmezett fájlcsoportban lesz tárolva. A CREATE TABLE-ben megadott tábla tárolási mechanizmusa később nem módosítható.
ON { partition_scheme | fájlcsoport | Az "alapértelmezett" } is megadható ELSŐDLEGES KULCS vagy EGYEDI korlátozásban. Ezek a korlátozások indexeket hoznak létre. Ha fájlcsoport van megadva, az index a nevesített fájlcsoportban lesz tárolva. Ha "default"
van megadva, vagy ha egyáltalán nincs bekapcsolva, az index ugyanabban a fájlcsoportban lesz tárolva, mint a tábla. Ha az ELSŐDLEGES KULCS vagy AZ EGYEDI kényszer fürtözött indexet hoz létre, a tábla adatlapjait a rendszer ugyanabban a fájlcsoportban tárolja, mint az index. Ha CLUSTERED
van megadva, vagy a kényszer egyébként fürtözött indexet hoz létre, és egy olyan partition_scheme van megadva, amely eltér a tábladefiníció partition_scheme vagy fájlcsoportjának, vagy fordítva, a rendszer csak a kényszerdefiníciót tartja tiszteletben, a másikat pedig figyelmen kívül hagyja.
Jegyzet
Ebben a kontextusban alapértelmezett nem kulcsszó. Ez az alapértelmezett fájlcsoport azonosítója, és el kell tagolást végezni, ahogyan ON "default"
vagy ON [default]
. Ha "default"
van megadva, a QUOTED_IDENTIFIER
beállításnak be kell kapcsolnia az aktuális munkamenethez. Ez az alapértelmezett beállítás. További információ: SET QUOTED_IDENTIFIER.
Particionált tábla létrehozása után fontolja meg a tábla LOCK_ESCALATION
beállításának AUTO
beállítását. Ez javíthatja az egyidejűséget, ha lehetővé teszi, hogy a zárolások a tábla helyett particionálási (HoBT) szintre eszkalálódjanak. További információ: ALTER TABLE.
TEXTIMAGE_ON { fájlcsoport | "default" }
Azt jelzi, hogy a szöveg, ntext, kép, xml, varchar(max)nvarchar(max), varbinary(max)és a CLR felhasználó által definiált típusoszlopai (beleértve a geometriát és a földrajzi adatokat) a megadott fájlcsoportban vannak tárolva.
TEXTIMAGE_ON
nem engedélyezett, ha a táblában nincsenek nagy értékű oszlopok.
TEXTIMAGE_ON
nem adható meg, ha partition_scheme van megadva. Ha "default"
van megadva, vagy ha TEXTIMAGE_ON
nincs megadva, a nagy értékű oszlopok az alapértelmezett fájlcsoportban vannak tárolva. A CREATE TABLE
megadott nagy értékű oszlopadatok tárolása később nem módosítható.
Jegyzet
varchar(max), nvarchar(max), varbinary(max), xml és nagy UDT-értékek közvetlenül az adatsorban vannak tárolva, legfeljebb 8000 bájtig, és amíg az érték elfér a rekordban. Ha az érték nem fér el a rekordban, a mutatót sorban tárolja a rendszer, a többit pedig a LOB tárterület sorából. A 0 az alapértelmezett érték, amely azt jelzi, hogy az összes érték közvetlenül az adatsorban van tárolva.
TEXTIMAGE_ON
csak a "LOB tárterület" helyét módosítja, az nem befolyásolja az adatok soron belüli tárolását. A sp_tableoption
soron kívüli nagy értéktípusokkal a teljes LOB-értéket a soron kívül tárolhatja.
Ebben a kontextusban alapértelmezett nem kulcsszó. Ez az alapértelmezett fájlcsoport azonosítója, és el kell tagolást végezni, ahogyan TEXTIMAGE_ON "default"
vagy TEXTIMAGE_ON [default]
. Ha "default"
van megadva, a QUOTED_IDENTIFIER
beállításnak be kell kapcsolnia az aktuális munkamenethez. Ez az alapértelmezett beállítás. További információ: SET QUOTED_IDENTIFIER.
FILESTREAM_ON { partition_scheme_name | fájlcsoport | "default" }
Az: SQL Server 2008 R2 (10.50.x) és újabb verziókra vonatkozik. Az Azure SQL Database és a felügyelt Azure SQL-példány nem támogatja a FILESTREAM
.
A FILESTREAM-adatok fájlcsoportjának megadása.
Ha a tábla FILESTREAM-adatokat tartalmaz, és a tábla particionált, a FILESTREAM_ON záradékot is tartalmaznia kell, és meg kell adnia a FILESTREAM-fájlcsoportok partíciós sémáját. Ennek a partíciósémának ugyanazokat a partíciófüggvényeket és partícióoszlopokat kell használnia, mint a tábla partícióséma; ellenkező esetben hiba jelenik meg.
Ha a tábla nincs particionálva, a FILESTREAM oszlop nem particionálható. A tábla FILESTREAM-adatait egyetlen fájlcsoportban kell tárolni. Ez a fájlcsoport a FILESTREAM_ON záradékban van megadva.
Ha a tábla nincs particionálva, és nincs megadva a FILESTREAM_ON
záradék, a rendszer a DEFAULT
tulajdonságkészletet tartalmazó FILESTREAM fájlcsoportot használja. Ha nincs FILESTREAM-fájlcsoport, hibaüzenet jelenik meg.
Az ON és a TEXTIMAGE_ON
függvényhez hasonlóan a FILESTREAM_ON
CREATE TABLE
használatával beállított érték nem módosítható, kivéve a következő eseteket:
- A CREATE INDEX utasítás fürtözött indexké alakítja a halomot. Ebben az esetben egy másik FILESTREAM-fájlcsoport, partíciós séma vagy NULL adható meg.
- A DROP INDEX utasítás egy fürtözött indexet halommé alakít át. Ebben az esetben egy másik FILESTREAM-fájlcsoportot, partíciós sémát vagy
"default"
lehet megadni.
A FILESTREAM_ON <filegroup>
záradékban szereplő fájlcsoportnak vagy a partíciós sémában elnevezett ÖSSZES FILESTREAM-fájlcsoportnak egy fájllal kell rendelkeznie a fájlcsoporthoz. Ezt a fájlt CREATE DATABASE vagy ALTER DATABASE utasítással kell definiálni; ellenkező esetben hiba jelenik meg.
A kapcsolódó FILESTREAM-cikkekért lásd: Bináris nagyméretű objektum – Blobadatok.
[ type_schema_name. ] type_name
Megadja az oszlop adattípusát és azt a sémát, amelyhez tartozik. Lemezalapú táblák esetén használja az alábbi adattípusok egyikét:
- Rendszeradat-típus
- Egy SQL Server-rendszer adattípusán alapuló aliastípus. Az alias adattípusok a
CREATE TYPE
utasítással jönnek létre, mielőtt felhasználhatók lennének a tábladefinícióban. Az alias-adattípus NULL vagy NOT NULL hozzárendelése felülírható aCREATE TABLE
utasítás során. A hossz specifikációja azonban nem módosítható; az alias adattípusának hossza nem határozható megCREATE TABLE
utasításban. - Felhasználó által definiált CLR-típus. A clr felhasználó által definiált típusok a
CREATE TYPE
utasítással jönnek létre, mielőtt felhasználhatók lennének a tábladefiníciókban. Ha felhasználó által definiált CLR-típuson szeretne oszlopot létrehozni, a típushoz a HIVATKOZÁSOK engedély szükséges.
Ha nincs megadva type_schema_name, az SQL Server adatbázismotor a következő sorrendben hivatkozik type_name:
- Az SQL Server rendszer adattípusa.
- Az aktuális felhasználó alapértelmezett sémája az aktuális adatbázisban.
- Az aktuális adatbázis
dbo
sémája.
A memóriaoptimalizált táblákról a támogatott rendszertípusok listáját támogatott adattípusok In-Memory OLTP- című témakörben talál.
pontossági
A megadott adattípus pontossága. Az érvényes pontossági értékekről további információt a Pontosság, Skálázás és Hosszcímű témakörben talál.
skálázási
A megadott adattípus méretezése. Az érvényes skálázási értékekről további információt a Pontosság, Skálázás és Hosszcímű témakörben talál.
maximális
Csak a varchar, nvarcharés varbinary adattípusokra vonatkozik 2^31 bájt karakter- és bináris adat tárolására, valamint 2^30 bájt Unicode-adat tárolására.
TARTALOM
Megadja, hogy a xml adattípusának minden példánya több legfelső szintű elemet tartalmazhat a column_name. A TARTALOM csak az xml adattípusra vonatkozik, és csak akkor adható meg, ha xml_schema_collection is meg van adva. Ha nincs megadva, a TARTALOM az alapértelmezett viselkedés.
DOKUMENTUM
Megadja, hogy az xml adattípusának minden példánya column_name csak egy legfelső szintű elemet tartalmazhat. A DOCUMENT csak az xml adattípusra vonatkozik, és csak akkor adható meg, ha xml_schema_collection is meg van adva.
xml_schema_collection
Csak a xml adattípusra vonatkozik, ha egy XML-sémagyűjteményt társít a típussal. Mielőtt beír egy XML- oszlopot egy sémába, először létre kell hoznia a sémát az adatbázisban CREATE XML SCHEMA COLLECTIONhasználatával.
ALAPÉRTELMEZETT
Az oszlophoz megadott értéket adja meg, ha egy érték nincs explicit módon megadva a beszúrás során. AZ ALAPÉRTELMEZETT definíciók az időbélyegkéntvagy a IDENTITY
tulajdonsággal rendelkező oszlopok kivételével bármely oszlopra alkalmazhatók. Ha egy felhasználó által definiált típusoszlophoz alapértelmezett érték van megadva, a típusnak támogatnia kell a constant_expression és a felhasználó által megadott típus közötti implicit átalakítást. Az ALAPÉRTELMEZETT definíciók el lesznek távolítva a tábla elvetésekor. Csak állandó érték, például karaktersztring; skaláris függvény (rendszer, felhasználó által definiált vagy CLR függvény); vagy a NULL alapértelmezettként használható. Az SQL Server korábbi verzióival való kompatibilitás fenntartása érdekében a korlátozás neve hozzárendelhető az ALAPÉRTELMEZETT értékhez.
constant_expression
Az oszlop alapértelmezett értékeként használt állandó, NULL vagy rendszerfüggvény.
memory_optimized_constant_expression
Az oszlop alapértelmezett értékeként használt állandó, NULL vagy rendszerfüggvény. Natívan lefordított tárolt eljárásokban támogatottnak kell lennie. A natívan lefordított tárolt eljárások beépített függvényeivel kapcsolatos további információkért lásd natívan lefordított T-SQL-modulok támogatott funkcióit.
AZONOSSÁG
Azt jelzi, hogy az új oszlop egy identitásoszlop. Amikor új sort ad hozzá a táblához, az adatbázismotor egyedi, növekményes értéket biztosít az oszlophoz. Az identitásoszlopokat általában ELSŐDLEGES KULCS megkötésekkel használják, amelyek a tábla egyedi sorazonosítójaként szolgálnak. A IDENTITY
tulajdonság smallint, smallint, int, bigint, decimális(p, 0)vagy numerikus(p, 0) oszlophoz rendelhető. Táblánként csak egy identitásoszlop hozható létre. A kötött alapértelmezett értékek és AZ ALAPÉRTELMEZETT korlátozások nem használhatók identitásoszlopokkal. A magot és a növekményt is meg kell adni. Ha egyik sincs megadva, az alapértelmezett érték (1,1).
vetőmag
A táblába betöltött első sorhoz használt érték.
növekményes
Az előző betöltött sor identitásértékéhez hozzáadott növekményes érték.
REPLIKÁCIÓHOZ NEM
A CREATE TABLE
utasításban a NOT FOR REPLICATION
záradék megadható az IDENTITY tulajdonsághoz, a KÜLFÖLDI KULCS kényszerekhez és a CHECK kényszerekhez. Ha ez a záradék a IDENTITY
tulajdonsághoz van megadva, a replikációs ügynökök beszúrásakor az értékek nem lesznek növelve az identitásoszlopokban. Ha ez a záradék egy korlátozáshoz van megadva, a korlátozás nem lesz kényszerítve, amikor a replikációs ügynökök beszúrási, frissítési vagy törlési műveleteket hajtanak végre.
MINDIG { SORKÉNT GENERÁLVA | TRANSACTION_ID | SEQUENCE_NUMBER } { START | END } [ HIDDEN ] [ NOT NULL ]
A következővonatkozik: SQL Server 2016 (13.x) és újabb, Azure SQL Database és felügyelt Azure SQL-példány.
A rendszer által használt oszlopot adja meg, amely automatikusan rögzíti a tábla és az előzménytáblázat sorverzióinak adatait (ha a tábla verziószámozott, és rendelkezik előzménytáblával). Ezzel az argumentummal a WITH SYSTEM_VERSIONING = ON
paraméterrel rendszerverziójú táblákat hozhat létre: időbeli vagy főkönyvtáblákat. További információ: frissíthető főkönyvtáblák és időbeli táblák.
Paraméter | Kötelező adattípus | Kötelező nullhiba | Leírás |
---|---|---|---|
SOR | datetime2 | START: NOT NULL VÉGE: NOT NULL |
Az a kezdési idő, amelyre a sorverzió érvényes (START), vagy az a befejezési idő, amelyre a sorverzió érvényes (END). Ezt az argumentumot a PERIOD FOR SYSTEM_TIME argumentummal használva hozzon létre egy időbeli táblát. |
TRANSACTION_ID | bigint | START: NOT NULL VÉGE: NULL |
A következőkre vonatkozik: SQL Server 2022 (16.x) és újabb verziók, valamint az Azure SQL Database. A sorverziót létrehozó (START) vagy érvénytelenítő (END) tranzakció azonosítója. Ha a tábla egy főkönyvtábla, az azonosító egy sorra hivatkozik a sys.database_ledger_transactions nézetben |
SEQUENCE_NUMBER | bigint | START: NOT NULL VÉGE: NULL |
A következőkre vonatkozik: SQL Server 2022 (16.x) és újabb verziók, valamint az Azure SQL Database. Egy sorverziót létrehozó (START) vagy törlést (END) létrehozó művelet sorszáma. Ez az érték egyedi a tranzakcióban. |
Ha olyan oszlopot próbál megadni, amely nem felel meg a fenti adattípusnak vagy nullability követelményeknek, a rendszer hibát jelez. Ha nem adja meg explicit módon a nullitást, a rendszer a fenti követelményeknek megfelelően NULL
vagy NOT NULL
határozza meg az oszlopot.
A HIDDEN
jelölővel megjelölhet egy vagy mindkét oszlopot, hogy implicit módon elrejtse ezeket az oszlopokat, így SELECT * FROM <table>
nem ad vissza értéket ezekhez az oszlopokhoz. Alapértelmezés szerint a pontoszlopok nem rejtve vannak. A használathoz a rejtett oszlopokat explicit módon fel kell venni minden olyan lekérdezésbe, amely közvetlenül hivatkozik az időbeli táblára. Ha módosítani szeretné egy meglévő időszakoszlop HIDDEN
attribútumát, PERIOD
el kell dobni, és újra létre kell hozni egy másik rejtett jelölővel.
INDEX INDEX_NAME [ FÜRTÖZÖTT | NEMCLUSTERED ] ( column_name [ ASC | DESC ] [ ,... n ] )
A következővonatkozik: SQL Server 2014 (12.x) és újabb, valamint Azure SQL Database.
Itt adhatja meg, hogy létre kell-e hozni egy indexet a táblában. Ez lehet fürtözött index vagy nemclustered index. Az index tartalmazza a felsorolt oszlopokat, és növekvő vagy csökkenő sorrendbe rendezi az adatokat.
INDEX INDEX_NAME FÜRTÖZÖTT OSZLOPTÁR
A következővonatkozik: SQL Server 2014 (12.x) és újabb, valamint Azure SQL Database.
A teljes táblázat oszlopos formátumban való tárolását határozza meg fürtözött oszlopcentrikus indexkel. Ez mindig tartalmazza a tábla összes oszlopát. Az adatok nem betűrendben vagy numerikus sorrendben vannak rendezve, mivel a sorok az oszlopcentrikus tömörítés előnyeinek eléréséhez vannak rendszerezve.
Az adatok sorrendjét az SQL Server 2022 -től (16.x) kezdődő fürtözött oszlopcentrikus indexben, az Azure SQL Database-ben, a felügyelt Azure SQL-példányban az Always-up-to-date update policyés az Azure Synapse Analytics használatával adhatja meg. További információ: A teljesítmény finomhangolása rendezett oszlopcentrikus indexekkel.
INDEX index_name [ NEMCLUSTERED ] COLUMNSTORE ( column_name [ ,... n ] )
A következővonatkozik: SQL Server 2014 (12.x) és újabb verziók, Azure SQL Database és Felügyelt Azure SQL-példány.
Megadja, hogy létrehoz-e nemclustered oszlopcentrikus indexet a táblán. Az alapul szolgáló tábla lehet sortár-halom vagy csoportosított index, de lehet fürtözött oszlopcentrikus index is. A táblán lévő nemclustered oszlopcentrikus indexek létrehozása minden esetben az index oszlopainak adatainak egy második példányát tárolja.
A nemclustered columnstore index fürtözött oszlopcentrikus indexként van tárolva és kezelve. Nemclustered columnstore indexnek nevezzük, mert az oszlopok korlátozhatók, és másodlagos indexként léteznek egy táblán.
Megadhatja az adatok sorrendjét az Azure SQL Database-ben és a felügyelt Azure SQL-példányban lévő nemclustered oszlopcentrikus indexekben az Always-up-to-date frissítési szabályzattal. További információ: A teljesítmény finomhangolása rendezett oszlopcentrikus indexekkel.
ON partition_scheme_name ( column_name )
Meghatározza azt a partíciós sémát, amely meghatározza azokat a fájlcsoportokat, amelyekre a particionált index partíciói le lesznek képezve. A partíciósémának léteznie kell az adatbázisban a CREATE PARTITION SCHEME vagy ALTER PARTITION SCHEMEvégrehajtásával. column_name azt az oszlopot adja meg, amely alapján particionált index lesz particionálásra. Ennek az oszlopnak meg kell egyeznie a partition_scheme_name használt partíciófüggvény argumentumának adattípusával, hosszával és pontosságával. column_name nem korlátozódik az indexdefiníció oszlopaira. Az alaptábla bármely oszlopa megadható, kivéve az EGYEDI index particionálását, column_name az egyedi kulcsként használtak közül kell választani. Ez a korlátozás lehetővé teszi, hogy az adatbázismotor csak egyetlen partíción belül ellenőrizze a kulcsértékek egyediségét.
Jegyzet
Nem egyedi fürtözött index particionálásakor az adatbázismotor alapértelmezés szerint hozzáadja a particionálási oszlopot a fürtözött indexkulcsok listájához, ha még nincs megadva. Nem egyedi, nemclustered index particionálásakor az adatbázismotor hozzáadja a particionálási oszlopot az index nem kulcs (belefoglalt) oszlopaként, ha még nincs megadva.
Ha partition_scheme_name vagy fájlcsoport nincs megadva, és a tábla particionálásra kerül, az index ugyanabba a partíciós sémába kerül, ugyanazzal a particionálási oszloptal, mint az alapul szolgáló tábla.
Jegyzet
XML-indexek particionálási sémája nem adható meg. Ha az alaptábla particionálása történik, az XML-index ugyanazt a partíciós sémát használja, mint a táblát.
Az indexek particionálásával kapcsolatos további információkért particionált táblákat és indexeket.
ON filegroup_name
Létrehozza a megadott indexet a megadott fájlcsoporton. Ha nincs megadva hely, és a tábla vagy nézet nincs particionálva, az index ugyanazt a fájlcsoportot használja, mint az alapul szolgáló tábla vagy nézet. A fájlcsoportnak már léteznie kell.
ON "default" (alapértelmezett)
Létrehozza a megadott indexet az alapértelmezett fájlcsoporton.
Jegyzet
Ebben a kontextusban alapértelmezett nem kulcsszó. Ez az alapértelmezett fájlcsoport azonosítója, és el kell tagolást végezni, ahogyan ON "default"
vagy ON [default]
. Ha "default"
van megadva, a QUOTED_IDENTIFIER
beállításnak be kell kapcsolnia az aktuális munkamenethez. Ez az alapértelmezett beállítás. További információ: SET QUOTED_IDENTIFIER.
[ FILESTREAM_ON { filestream_filegroup_name | partition_scheme_name | "NULL" } ]
Az: SQL Server 2008 R2 (10.50.x) és újabb verziókra vonatkozik.
A TÁBLA FILESTREAM-adatainak elhelyezését adja meg fürtözött index létrehozásakor. A FILESTREAM_ON záradék lehetővé teszi a FILESTREAM-adatok áthelyezését egy másik FILESTREAM-fájlcsoportba vagy partíciós sémába.
filestream_filegroup_name egy FILESTREAM-fájlcsoport neve. A fájlcsoportnak egy fájllal kell rendelkeznie a fájlcsoporthoz egy CREATE DATABASE vagy ALTER DATABASE utasítás használatával; ellenkező esetben hiba jelenik meg.
Ha a tábla particionált, a FILESTREAM_ON
záradékot is tartalmaznia kell, és meg kell adnia a FILESTREAM fájlcsoportok partíciós sémáját, amely ugyanazt a partíciófüggvényt és partícióoszlopot használja, mint a tábla partíciós sémája. Ellenkező esetben hiba merül fel.
Ha a tábla nincs particionálva, a FILESTREAM oszlop nem particionálható. A tábla FILESTREAM-adatait egyetlen fájlcsoportban kell tárolni, amely a FILESTREAM_ON
záradékban van megadva.
FILESTREAM_ON NULL
CREATE INDEX
utasításban is megadható, ha fürtözött indexet hoz létre, és a tábla nem tartalmaz FILESTREAM oszlopot.
További információ: FILESTREAM.
ROWGUIDCOL
Azt jelzi, hogy az új oszlop egy sor GUID oszlopa. Táblázatonként csak egy uniqueidentifier oszlop jelölhető ki ROWGUIDCOL oszlopként. A ROWGUIDCOL tulajdonság alkalmazása lehetővé teszi az oszlop $ROWGUID
használatával történő hivatkozását. A ROWGUIDCOL tulajdonság csak egy uniqueidentifier oszlophoz rendelhető hozzá. A felhasználó által definiált adattípus-oszlopok nem jelölhetők ki ROWGUIDCOL használatával.
A ROWGUIDCOL tulajdonság nem kényszeríti ki az oszlopban tárolt értékek egyediségét. A ROWGUIDCOL nem generál automatikusan értékeket a táblába beszúrt új sorokhoz. Az egyes oszlopok egyedi értékeinek létrehozásához használja az NEWID vagy NEWSEQUENTIALID függvényt INSERT utasításokon, vagy használja ezeket a függvényeket alapértelmezettként az oszlophoz.
TITKOSÍTOTT
Az oszlopok titkosítását az Always Encrypted funkcióval adja meg.
COLUMN_ENCRYPTION_KEY = key_name
Megadja az oszloptitkosítási kulcsot. További információ: CREATE COLUMN ENCRYPTION KEY.
ENCRYPTION_TYPE = { DETERMINISZTIKUS | RANDOMIZED }
determinisztikus titkosítási olyan metódust használ, amely mindig ugyanazt a titkosított értéket hozza létre egy adott egyszerű szöveges értékhez. A determinisztikus titkosítás lehetővé teszi a keresést egyenlőség-összehasonlítás, csoportosítás és táblák összekapcsolása használatával, titkosított értékeken alapuló egyenlőségi illesztésekkel, de lehetővé teszi, hogy a jogosulatlan felhasználók a titkosított értékekre vonatkozó információkat a titkosított oszlop mintáinak vizsgálatával találják meg. Két táblához való csatlakozás determinisztikusan titkosított oszlopokon csak akkor lehetséges, ha mindkét oszlopot ugyanazzal az oszloptitkosítási kulccsal titkosítja. A determinisztikus titkosításnak oszlopelrendezést kell használnia a karakteroszlopok bináris2 rendezési sorrendjével.
véletlenszerű titkosítási kevésbé kiszámítható módon titkosítja az adatokat. A véletlenszerű titkosítás biztonságosabb, de megakadályozza a titkosított oszlopokon történő számításokat és indexelést, kivéve, ha az SQL Server-példány biztonságos enklávékkal támogatja az Always Encryptedt. További információt Biztonságos enklávékkal rendelkező Always Encrypted című cikkben talál.
Ha Always Encryptedt használ (biztonságos enklávék nélkül), használjon determinisztikus titkosítást olyan oszlopokhoz, amelyek paraméterekkel vagy csoportosítási paraméterekkel fognak keresni, például kormányzati azonosítószámmal. Használjon véletlenszerű titkosítást olyan adatokhoz, mint például a hitelkártyaszám, amely nem más rekordokkal van csoportosítva, vagy táblák összekapcsolására szolgál, és amelyekre nem keres, mert más oszlopokat (például tranzakciószámot) használ a titkosított oszlopot tartalmazó sor megkereséséhez.
Ha az Always Encryptedt biztonságos enklávékkal használja, a véletlenszerű titkosítás ajánlott titkosítási típus.
Az oszlopoknak megfelelő adattípusúnak kell lenniük.
ALGORITMUS
Az: SQL Server 2016 (13.x) és újabb verziókra vonatkozik.
'AEAD_AES_256_CBC_HMAC_SHA_256'
kell lennie.További információ a funkciókorlátozásokról: Always Encrypted.
RITKA
Azt jelzi, hogy az oszlop ritka oszlop. A ritka oszlopok tárolása null értékekre van optimalizálva. A ritka oszlopok nem jelölhetők NOT NULL értékként. További korlátozások és további információk a ritka oszlopokról: Ritka oszlopok használata.
MASZKOLT ( FÜGGVÉNY = 'mask_function' )
Az: SQL Server 2016 (13.x) és újabb verziókra vonatkozik.
Dinamikus adatmaszkot ad meg. mask_function a maszkoló függvény neve a megfelelő paraméterekkel. Négy függvény érhető el:
default()
email()
partial()
random()
ALTER ANY MASK
engedélyre van szükség.
A függvényparamétereket a dinamikus adatmaszkolás című témakörben talál.
FILESTREAM
Az: SQL Server 2008 R2 (10.50.x) és újabb verziókra vonatkozik.
Csak varbinary(max) oszlopokra érvényes. A BLOB-adatok varbinary(max) FILESTREAM-tárterületét adja meg.
A táblának tartalmaznia kell a uniqueidentifier rowGUIDCOL attribútummal rendelkező adattípus oszlopát is. Ez az oszlop nem engedélyezheti a null értékeket, és EGYEDI vagy ELSŐDLEGES KULCS egyoszlopos kényszerrel kell rendelkeznie. Az oszlop GUID-értékét egy alkalmazásnak kell megadnia az adatok beszúrásakor, vagy a NEWID () függvényt használó ALAPÉRTELMEZETT korlátozással.
A ROWGUIDCOL oszlopot nem lehet elvetni, és a kapcsolódó megkötések nem módosíthatók, miközben a tábla fájlstream oszlopa van definiálva. A ROWGUIDCOL oszlop csak az utolsó FILESTREAM oszlop elvetése után hajtható végre.
Ha egy oszlophoz meg van adva a FILESTREAM storage attribútum, a rendszer az oszlop összes értékét egy FILESTREAM-adattárolóban tárolja a fájlrendszeren.
COLLATION_NAME RENDEZÉSE
Megadja az oszlop rendezési adatait. A rendezés neve lehet Windows-rendezési név vagy SQL-rendezés neve. collation_name csak a karakter, varchar, szöveg, nchar, nvarcharés ntext adattípusokra alkalmazható. Ha nincs megadva, az oszlophoz vagy a felhasználó által megadott adattípus rendezése, ha az oszlop felhasználó által definiált adattípus, vagy az adatbázis alapértelmezett rendezése.
A Windows- és SQL-rendezési nevekről további információt Windows-rendezési név és SQL-rendezési névcímű cikkben talál.
További információ: COLLATE.
KÉNYSZER
Választható kulcsszó, amely az ELSŐDLEGES KULCS, a NOT NULL, az EGYEDI, a KÜLFÖLDI KULCS vagy a CHECK kényszer definíciójának kezdetét jelzi.
constraint_name
A kényszer neve. A kényszerneveknek egyedinek kell lenniük azon a sémán belül, amelyhez a tábla tartozik.
NULL | NOT NULL
Annak meghatározása, hogy a null értékek engedélyezettek-e az oszlopban. A NULL nem szigorúan kényszer, de a NOT NULL értékhez hasonlóan megadható. A NOT NULL érték csak akkor adható meg a számított oszlopokhoz, ha a PERSISTED is meg van adva.
ELSŐDLEGES KULCS
Egy olyan korlátozás, amely egy adott oszlop vagy oszlop entitásintegritását kényszeríti ki egy egyedi indexen keresztül. Táblánként csak egy ELSŐDLEGES KULCS kényszer hozható létre.
EGYEDÜLÁLLÓ
Olyan korlátozás, amely egy adott oszlop vagy oszlop entitásintegritást biztosít egy egyedi indexen keresztül. Egy tábla több EGYEDI korlátozással is rendelkezhet.
FÜRTÖZÖTT | NEMCLUSTERED
Azt jelzi, hogy az ELSŐDLEGES KULCS vagy AZ EGYEDI korlátozáshoz fürtözött vagy nemclustered index jön létre. Az ELSŐDLEGES KULCS megkötések alapértelmezés szerint FÜRTÖZÖTT, az EGYEDI kényszerek pedig alapértelmezés szerint a NEMCLUSTERED.
Egy
CREATE TABLE
utasításban a CLUSTERED csak egy korlátozáshoz adható meg. Ha a CLUSTERED egy EGYEDI kényszerhez van megadva, és az ELSŐDLEGES KULCS kényszer is meg van adva, az ELSŐDLEGES KULCS alapértelmezés szerint NEMCLUSTERED lesz.KÜLFÖLDI KULCSHIVATKOZÁSOK
Olyan korlátozás, amely hivatkozási integritást biztosít az oszlopban vagy oszlopokban lévő adatokhoz. A KÜLFÖLDI KULCS megkötései megkövetelik, hogy az oszlop minden értéke szerepel a hivatkozott tábla megfelelő hivatkozott oszlopában vagy oszlopaiban. A KÜLFÖLDI KULCS megkötések csak azokra az oszlopokra hivatkozhatnak, amelyek ELSŐDLEGES KULCS vagy EGYEDI kényszerek a hivatkozott táblában vagy a hivatkozott tábla EGYEDI INDEXében hivatkozott oszlopokban. A számított oszlopokban lévő idegen kulcsokat IS MEG KELL őrizni.
[ [ schema_name. ] referenced_table_name ]
A FOREIGN KEY kényszer által hivatkozott tábla neve és a séma, amelyhez tartozik.
( ref_column [ ,... n ] )
A FOREIGN KEY kényszer által hivatkozott táblából származó oszlop vagy oszloplista.
ON DELETE { NO ACTION | CASCADE | NULL ÉRTÉK BEÁLLÍTÁSA | ALAPÉRTELMEZETT BEÁLLÍTÁS }
Megadja, hogy a létrehozott tábla sorai milyen műveletet hajtanak végre, ha ezek a sorok hivatkozási kapcsolatban állnak, és a hivatkozott sor törlődik a szülőtáblából. Az alapértelmezett művelet a NINCS MŰVELET.
NINCS MŰVELET
Az adatbázismotor hibát jelez, és a rendszer visszaállítja a szülőtábla sorának törlési műveletét.
VÍZESÉS
A rendszer törli a megfelelő sorokat a hivatkozó táblából, ha az adott sor törlődik a szülőtáblából.
NULL ÉRTÉK BEÁLLÍTÁSA
Az idegen kulcsot alkotó összes érték NULL értékre van állítva, ha a szülőtábla megfelelő sorát törlik. A kényszer végrehajtásához az idegen kulcs oszlopainak null értékűnek kell lenniük.
ALAPÉRTELMEZETT BEÁLLÍTÁS
Az idegen kulcsot alkotó összes érték az alapértelmezett értékre van állítva a szülőtábla megfelelő sorának törlésekor. A kényszer végrehajtásához az összes idegenkulcs-oszlopnak alapértelmezett definíciókkal kell rendelkeznie. Ha egy oszlop null értékű, és nincs megadva explicit alapértelmezett érték, akkor a NULL lesz az oszlop implicit alapértelmezett értéke.
Ne adjon meg
CASCADE
, hogy a tábla szerepel-e a logikai rekordokat használó egyesítési kiadványban. További információ a logikai rekordokról: Kapcsolódó sorok módosításainak csoportosítása logikai rekordokkal.ON DELETE CASCADE
nem határozható meg, ha már létezikINSTEAD OF
eseményindítóON DELETE
a táblában.Az
AdventureWorks2022
adatbázisban például aProductVendor
tábla hivatkozási kapcsolatban áll aVendor
táblával. AProductVendor.BusinessEntityID
idegen kulcs azVendor.BusinessEntityID
elsődleges kulcsra hivatkozik.Ha egy
DELETE
utasítást hajt végre aVendor
tábla egyik sorában, ésON DELETE CASCADE
művelet van megadvaProductVendor.BusinessEntityID
esetében, az adatbázismotor egy vagy több függő sort keres aProductVendor
táblában. Ha van ilyen, aProductVendor
tábla függő sorai törlődnek, valamint aVendor
táblában hivatkozott sor is.Ezzel szemben ha
NO ACTION
van megadva, az adatbázismotor hibát jelez, és visszaállítja a törlési műveletet aVendor
sorban, ha aProductVendor
táblában legalább egy sor hivatkozik rá.FRISSÍTÉSEN { NINCS MŰVELET | CASCADE | NULL ÉRTÉK BEÁLLÍTÁSA | ALAPÉRTELMEZETT BEÁLLÍTÁS }
Megadja, hogy a tábla sorai milyen műveletet hajtanak végre, amikor a sorok hivatkozási kapcsolatban állnak, és a hivatkozott sor frissül a szülőtáblában. Az alapértelmezett művelet a NINCS MŰVELET.
NINCS MŰVELET
Az adatbázismotor hibát jelez, és a szülőtábla sorának frissítési művelete vissza lesz állítva.
VÍZESÉS
A megfelelő sorok frissülnek a hivatkozó táblában, amikor az adott sor frissül a szülőtáblában.
NULL ÉRTÉK BEÁLLÍTÁSA
Az idegen kulcsot alkotó összes érték NULL értékre van állítva a szülőtábla megfelelő sorának frissítésekor. A kényszer végrehajtásához az idegen kulcs oszlopainak null értékűnek kell lenniük.
ALAPÉRTELMEZETT BEÁLLÍTÁS
Az idegen kulcsot alkotó összes érték az alapértelmezett értékre van állítva a szülőtábla megfelelő sorának frissítésekor. A kényszer végrehajtásához az összes idegenkulcs-oszlopnak alapértelmezett definíciókkal kell rendelkeznie. Ha egy oszlop null értékű, és nincs megadva explicit alapértelmezett érték, akkor a NULL lesz az oszlop implicit alapértelmezett értéke.
Ne adjon meg
CASCADE
, hogy a tábla szerepel-e a logikai rekordokat használó egyesítési kiadványban. További információ a logikai rekordokról: Kapcsolódó sorok módosításainak csoportosítása logikai rekordokkal.ON UPDATE CASCADE
,SET NULL
vagySET DEFAULT
nem határozható meg, ha egyINSTEAD OF
eseményindítóON UPDATE
már létezik a módosított táblában.Az
AdventureWorks2022
adatbázisban például aProductVendor
tábla hivatkozási kapcsolatban áll aVendor
táblával:ProductVendor.BusinessEntity
idegen kulcs azVendor.BusinessEntityID
elsődleges kulcsra hivatkozik.Ha egy UPDATE utasítást hajt végre a
Vendor
tábla egyik sorában, és aProductVendor.BusinessEntityID
egy ON UPDATE CASCADE műveletet ad meg, az adatbázismotor egy vagy több függő sort keres aProductVendor
táblában. Ha létezik ilyen, aProductVendor
tábla függő sorai frissülnek, valamint aVendor
táblában hivatkozott sor is.Ezzel szemben, ha NINCS MŰVELET megadva, az adatbázismotor hibát jelez, és visszaállítja a frissítési műveletet a
Vendor
sorban, ha aProductVendor
táblában legalább egy sor hivatkozik rá.ELLENŐRIZ
Olyan kényszer, amely a tartomány integritását kényszeríti ki az oszlopokba vagy oszlopokba beírható lehetséges értékek korlátozásával. A számított oszlopokRA vonatkozó CHECK-korlátozásokat IS MEGŐRZÖTTként kell megjelölni.
logical_expression
Igaz vagy HAMIS értéket visszaadó logikai kifejezés. Az alias adattípusai nem részei a kifejezésnek.
column_name
Egy zárójelben szereplő oszlop vagy oszloplista, amely a táblakorlátozásokban a kényszerdefinícióban használt oszlopokat jelzi.
[ ASC | DESC ]
A táblakorlátozásokban részt vevő oszlop vagy oszlopok rendezésének sorrendjét adja meg. Az alapértelmezett érték az ASC.
partition_scheme_name
Annak a partíciós sémának a neve, amely meghatározza azokat a fájlcsoportokat, amelyekre egy particionált tábla partíciói le lesznek képezve. A partíciósémának léteznie kell az adatbázisban.
[ partition_column_name. ]
Megadja azt az oszlopot, amely alapján a particionált táblák particionálásra kerülnek. Az oszlopnak meg kell egyeznie a partíciófüggvényben megadott értékkel, amelyet partition_scheme_name adattípus, hossz és pontosság szempontjából használ. A partíciófüggvényben részt vevő számított oszlopot explicit módon MEG KELL jelölni.
Fontos
Javasoljuk, hogy a particionált táblák particionálási oszlopában adja meg a NOT NULL értéket, valamint a nem particionált táblákat is, amelyek az ALTER TABLE forrásai vagy céljai... SWITCH-műveletek. Ezzel gondoskodik arról, hogy a particionálási oszlopokra vonatkozó CHECK korlátozásoknak ne kelljen null értékeket keresniük.
FILLFACTOR = fillfactor
Meghatározza, hogy az adatbázismotor milyen teljes mértékben készítsen minden indexlapot, amely az indexadatok tárolására szolgál. A felhasználó által megadott fillfactor értékek 1 és 100 között lehetnek. Ha nincs megadva érték, az alapértelmezett érték 0. A 0 és a 100 kitöltési tényező értéke minden tekintetben megegyezik.
Fontos
A FILLFACTOR = fillfactor az elsődleges kulcsra vagy egyedi korlátozásokra vonatkozó egyetlen indexbeállítás, a visszamenőleges kompatibilitás érdekében megmarad, de a jövőbeni kiadásokban nem lesz ilyen módon dokumentálva.
column_set_name ALL_SPARSE_COLUMNS XML-COLUMN_SET
Az oszlopkészlet neve. Az oszlopkészletek olyan nem beírt XML-reprezentációk, amelyek a tábla összes ritka oszlopát strukturált kimenetben egyesítik. További információ az oszlopkészletekről: Oszlopkészletek használata.
SYSTEM_TIME IDŐSZAKA ( system_start_time_column_name , system_end_time_column_name )
A következővonatkozik: SQL Server 2016 (13.x) és újabb, valamint Azure SQL Database.
Megadja azoknak az oszlopoknak a nevét, amelyeket a rendszer a rekord érvényességének időtartamának rögzítésére használ. Ezzel az argumentummal GENERATED ALWAYS AS ROW { START | END }
és WITH SYSTEM_VERSIONING = ON
argumentumokkal hozhat létre időbeli táblázatot. További információ: Temporális táblák.
COMPRESSION_DELAY
A következővonatkozik: SQL Server 2016 (13.x) és újabb, valamint Azure SQL Database.
Memóriaoptimalizált esetén a késleltetés azt határozza meg, hogy egy sornak legalább hány percig kell a táblában maradnia, változatlanul, mielőtt az oszlopcentrikus indexbe való tömörítésre jogosult lenne. Az SQL Server kiválasztja azokat a sorokat, amelyeket a legutóbbi frissítési időnek megfelelően tömöríteni szeretne. Ha például a sorok gyakran változnak kétórás időszakban, beállíthatja COMPRESSION_DELAY = 120 Minutes
, hogy a frissítések befejeződjenek, mielőtt az SQL Server tömörítené a sort.
Lemezalapú tábla esetén a késleltetés azt a minimális percszámot adja meg, amíg a zárt állapotú delta sorcsoportnak a delta sorcsoportban kell maradnia ahhoz, hogy az SQL Server tömörítse a tömörített sorcsoportba. Mivel a lemezalapú táblák nem követik nyomon az egyes sorok beszúrási és frissítési idejét, az SQL Server a késést a ZÁRT állapotú delta sorcsoportokra alkalmazza.
Az alapértelmezett érték 0 perc.
A COMPRESSION_DELAY
használatára vonatkozó javaslatokért lásd: A Columnstore használatának első lépései valós idejű működési elemzési
<table_option> ::=
Egy vagy több táblázatbeállítást határoz meg.
DATA_COMPRESSION
Megadja a megadott tábla, partíciószám vagy partíciótartomány adattömörítési beállítását. A lehetőségek a következők:
Egyik sem
A tábla vagy a megadott partíciók nincsenek tömörítve.
SOR
A táblázat vagy a megadott partíciók sortömörítéssel vannak tömörítve.
OLDAL
A táblázat vagy a megadott partíciók laptömörítéssel vannak tömörítve.
COLUMNSTORE
A következővonatkozik: SQL Server 2016 (13.x) és újabb, valamint Azure SQL Database.
Csak oszlopcentrikus indexekre vonatkozik, beleértve a nemclustered columnstore és a fürtözött oszlopcentrikus indexeket is. A COLUMNSTORE a legkiemelőbb oszlopcentrikus tömörítéssel történő tömörítést adja meg. Ez a tipikus választás.
COLUMNSTORE_ARCHIVE
A következővonatkozik: SQL Server 2016 (13.x) és újabb, valamint Azure SQL Database.
Csak oszlopcentrikus indexekre vonatkozik, beleértve a nemclustered columnstore és a fürtözött oszlopcentrikus indexeket is. COLUMNSTORE_ARCHIVE kisebb méretűre tömöríti a táblát vagy a partíciót. Ez felhasználható archiválásra vagy más olyan helyzetekre, amelyek kisebb tárterületet igényelnek, és több időt engedhetnek meg a tárolásra és a lekérésre.
További információ: Adattömörítési.
XML_COMPRESSION
A következővonatkozik: SQL Server 2022 (16.x) és újabb verziók, Azure SQL Database és felügyelt Azure SQL-példány.
Megadja a táblázat bármely XML- adattípus-oszlopának XML-tömörítési beállítását. A lehetőségek a következők:
RA
A xml adattípust használó oszlopok tömörítve vannak.
KI
Az xml adattípust használó oszlopok nem tömöríthetők.
PARTÍCIÓKON ( { <partition_number_expression> | [ ,... n ] )
Meghatározza azokat a partíciókat, amelyekre a DATA_COMPRESSION
vagy XML_COMPRESSION
beállítások vonatkoznak. Ha a tábla nincs particionálva, a ON PARTITIONS
argumentum hibát fog eredményezni. Ha a ON PARTITIONS
záradék nincs megadva, a DATA_COMPRESSION
beállítás a particionált tábla összes partíciójára érvényes lesz.
partition_number_expression a következő módokon adhatók meg:
- Adja meg egy partíció partíciószámát, például:
ON PARTITIONS (2)
- Adja meg a partíciószámokat több, vesszővel elválasztott partícióhoz, például:
ON PARTITIONS (1, 5)
- Adja meg a tartományokat és az egyes partíciókat, például:
ON PARTITIONS (2, 4, 6 TO 8)
<range>
megadható a TO szóval elválasztott partíciószámokként, például: ON PARTITIONS (6 TO 8)
.
Ha különböző típusú adattömörítést szeretne beállítani a különböző partíciókhoz, adja meg többször a DATA_COMPRESSION
beállítást, például:
WITH
(
DATA_COMPRESSION = NONE ON PARTITIONS (1),
DATA_COMPRESSION = ROW ON PARTITIONS (2, 4, 6 TO 8),
DATA_COMPRESSION = PAGE ON PARTITIONS (3, 5)
);
A XML_COMPRESSION
lehetőséget többször is megadhatja, például:
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> ::=
Egy vagy több indexbeállítást határoz meg. A beállítások teljes leírását a CREATE INDEXcímű témakörben talál.
PAD_INDEX = { ON | KI }
Bekapcsolva a FILLFACTOR által megadott szabad terület százalékos aránya az index közbenső szintű lapjaira lesz alkalmazva. Ha ki van kapcsolva vagy a FILLFACTOR értéke nincs megadva, a köztes szintű lapok kapacitás közelében vannak kitöltve, így elegendő hely marad az index által megengedett maximális méret legalább egy sorához, figyelembe véve a köztes lapok kulcskészletét. Az alapértelmezett érték ki van kapcsolva.
FILLFACTOR = fillfactor
Ez a százalék azt jelzi, hogy az adatbázismotor mennyire legyen teljes az egyes indexlapok levélszintjének az index létrehozása vagy módosítása során. fillfactor 1 és 100 közötti egész számnak kell lennie. Az alapértelmezett érték 0. A 0 és a 100 kitöltési tényező értéke minden tekintetben megegyezik.
IGNORE_DUP_KEY = { ON | KI }
Megadja a hibaválaszt, amikor egy beszúrási művelet ismétlődő kulcsértékeket próbál beszúrni egy egyedi indexbe. A IGNORE_DUP_KEY beállítás csak az index létrehozása vagy újraépítése után történő beszúrási műveletekre vonatkozik. A beállításnak nincs hatása CREATE INDEX, ALTER INDEXvagy UPDATEvégrehajtásakor. Az alapértelmezett érték ki van kapcsolva.
RA
Figyelmeztető üzenet jelenik meg, ha ismétlődő kulcsértékeket szúr be egy egyedi indexbe. Csak az egyediségi korlátozást megsértő sorok fognak meghiúsulni.
KI
Hibaüzenet jelenik meg, ha ismétlődő kulcsértékeket szúr be egy egyedi indexbe. A rendszer a teljes INSERT műveletet visszaállítja.
IGNORE_DUP_KEY
nem állítható BE értékre a nézeten létrehozott indexek, nem egyedi indexek, XML-indexek, térbeli indexek és szűrt indexek esetében.
A IGNORE_DUP_KEY
megtekintéséhez használja sys.indexes.
A visszamenőlegesen kompatibilis szintaxisban a WITH IGNORE_DUP_KEY
egyenértékű a WITH IGNORE_DUP_KEY = ON
.
STATISTICS_NORECOMPUTE = { ON | KI }
Amikor be van kapcsolva, a elavult indexstatisztikák nem lesznek automatikusan újrafordítve. Ha ki van kapcsolva, az automatikus statisztikafrissítés engedélyezve van. Az alapértelmezett érték ki van kapcsolva.
ALLOW_ROW_LOCKS = { ON | KI }
Amikor be van kapcsolva, a sorzárolások engedélyezettek az index elérésekor. Az adatbázismotor határozza meg a sorzárolások használatát. Ha ki van kapcsolva, a sorzárak nem használhatók. Az alapértelmezett érték be van kapcsolva.
ALLOW_PAGE_LOCKS = { ON | KI }
Amikor be van kapcsolva, az index elérésekor az oldalzárolások engedélyezettek. Az adatbázismotor határozza meg az oldalzárolások használatát. Ha ki van kapcsolva, a rendszer nem használja az oldalzárakat. Az alapértelmezett érték be van kapcsolva.
OPTIMIZE_FOR_SEQUENTIAL_KEY = { ON | KI }
A következővonatkozik: SQL Server 2019 (15.x) és újabb, Azure SQL Database és felügyelt Azure SQL-példány.
Megadja, hogy az utolsó oldal beszúrására optimalizálja-e a versengést. Az alapértelmezett érték ki van kapcsolva. További információt az INDEX LÉTREHOZÁSA lap szekvenciális kulcsok szakaszában talál.
FILETABLE_DIRECTORY = directory_name
A következővonatkozik: SQL Server 2012 (11.x) és újabb.
A Windows-kompatibilis FileTable könyvtár nevét adja meg. Ennek a névnek egyedinek kell lennie az adatbázisban található összes FileTable könyvtárnév között. Az egyediség-összehasonlítás a rendezési beállításoktól függetlenül érzéketlen a kis- és nagybetűk között. Ha ez az érték nincs megadva, a fájltábla neve lesz használva.
FILETABLE_COLLATE_FILENAME = { collation_name | database_default }
A következővonatkozik: SQL Server 2012 (11.x) és újabb. Az Azure SQL Database és a felügyelt Azure SQL-példány nem támogatja a FILETABLE
.
Megadja a Fájltábla Name
oszlopára alkalmazni kívánt rendezés nevét. A rendezésnek érzéketlennek kell lennie a Windows operációs rendszer fájlelnevezési szemantikájának való megfeleléshez. Ha ez az érték nincs megadva, a rendszer az adatbázis alapértelmezett rendezést használja. Ha az adatbázis alapértelmezett rendezése megkülönbözteti a kis- és nagybetűk megkülönböztetettségét, a rendszer hibát jelez, és a CREATE TABLE művelet meghiúsul.
collation_name
A kis- és nagybetűk megkülönböztetésének neve.
database_default
Megadja, hogy az adatbázis alapértelmezett rendezési beállítását kell használni. Ennek a rendezésnek érzéketlennek kell lennie.
FILETABLE_PRIMARY_KEY_CONSTRAINT_NAME = constraint_name
A következővonatkozik: SQL Server 2012 (11.x) és újabb. Az Azure SQL Database és a felügyelt Azure SQL-példány nem támogatja a FILETABLE
.
Megadja a Fájltáblán automatikusan létrehozott elsődleges kulcskényszerhez használandó nevet. Ha ez az érték nincs megadva, a rendszer létrehoz egy nevet a kényszernek.
FILETABLE_STREAMID_UNIQUE_CONSTRAINT_NAME = constraint_name
A következővonatkozik: SQL Server 2012 (11.x) és újabb. Az Azure SQL Database és a felügyelt Azure SQL-példány nem támogatja a FILETABLE
.
Megadja a Fájltábla stream_id oszlopában automatikusan létrehozott egyedi korlátozáshoz használandó nevet. Ha ez az érték nincs megadva, a rendszer létrehoz egy nevet a kényszernek.
FILETABLE_FULLPATH_UNIQUE_CONSTRAINT_NAME = constraint_name
A következővonatkozik: SQL Server 2012 (11.x) és újabb. Az Azure SQL Database és a felügyelt Azure SQL-példány nem támogatja a FILETABLE
.
Megadja az egyedi korlátozáshoz használni kívánt nevet, amely automatikusan létrejön a Fájltábla parent_path_locator és oszlopában. Ha ez az érték nincs megadva, a rendszer létrehoz egy nevet a kényszernek.
SYSTEM_VERSIONING = ON [ ( HISTORY_TABLE = schema_name.history_table_name [ , DATA_CONSISTENCY_CHECK = { ON | OFF } ] ) ]
A következővonatkozik: SQL Server 2016 (13.x) és újabb, Azure SQL Database és felügyelt Azure SQL-példány.
Engedélyezi a tábla rendszerverziósítását, ha az adattípus, a nullability korlátozás és az elsődleges kulcsmegkötési követelmények teljesülnek. A rendszer minden rekord előzményeit egy külön előzménytáblában rögzíti a rendszer által verziózott táblában. Ha nem használja a HISTORY_TABLE
argumentumot, az előzménytábla neve MSSQL_TemporalHistoryFor<primary_table_object_id>
lesz. Ha egy előzménytábla neve az előzménytábla létrehozásakor van megadva, meg kell adnia a sémát és a tábla nevét.
Ha az előzménytábla nem létezik, a rendszer létrehoz egy új előzménytáblát, amely megfelel az aktuális tábla sémájának ugyanabban a fájlcsoportban, mint az aktuális tábla, és kapcsolatot hoz létre a két tábla között, és lehetővé teszi a rendszer számára, hogy az előzménytáblában szereplő összes rekord előzményeit rögzítse. Alapértelmezés szerint az előzménytábla PAGE
tömörítve.
Ha a HISTORY_TABLE
argumentum egy meglévő előzménytáblára mutató hivatkozás létrehozására és használatára szolgál, akkor a hivatkozás az aktuális tábla és a megadott tábla között jön létre. Az aktuális tábla particionálása esetén az előzménytábla az alapértelmezett fájlcsoportban jön létre, mert a particionálási konfiguráció nem replikálódik automatikusan az aktuális táblából az előzménytáblába. Meglévő előzménytáblára mutató hivatkozás létrehozásakor dönthet úgy, hogy adatkonzisztencia-ellenőrzést végez. Ez az adatkonzisztencia-ellenőrzés biztosítja, hogy a meglévő rekordok ne legyenek átfedésben. Az adatkonzisztencia-ellenőrzés végrehajtása az alapértelmezett.
Használja ezt az argumentumot a PERIOD FOR SYSTEM_TIME
és GENERATED ALWAYS AS ROW { START | END }
argumentumokkal a tábla rendszerverziósításának engedélyezéséhez. További információ: Temporális táblák. Ezzel az argumentummal WITH LEDGER = ON
argumentummal létrehozhat egy frissíthető főkönyvtáblát. A meglévő előzménytáblák nem használhatók főkönyvtáblákkal.
REMOTE_DATA_ARCHIVE = { ON [ ( table_stretch_options [ ,... n ] ) ] ] | KI ( MIGRATION_STATE = SZÜNETELTETVE ) }
Az: SQL Server 2016 (13.x) és újabb verziókra vonatkozik.
Az új táblát úgy hozza létre, hogy a Stretch Database engedélyezve van vagy le van tiltva. További információ: Stretch Database.
Fontos
A Stretch Database elavult az SQL Server 2022 -ben (16.x) és az Azure SQL Database-ben. Ez a funkció az adatbázismotor egy későbbi verziójában lesz eltávolítva. Ne használja ezt a funkciót az új fejlesztési munkában, és tervezze meg a funkciót jelenleg használó alkalmazások módosítását.
Stretch Database engedélyezése tábla
Ha ON
megadásával engedélyezi a Stretchet egy táblához, megadhat MIGRATION_STATE = OUTBOUND
az adatok azonnali áttelepítésének megkezdéséhez, vagy MIGRATION_STATE = PAUSED
az adatmigrálás elhalasztásához. Az alapértelmezett érték a MIGRATION_STATE = OUTBOUND
. További információ a Stretch táblához való engedélyezéséről: Stretch Database engedélyezése tábla.
előfeltételek. Mielőtt engedélyezi a Stretchet egy táblához, engedélyeznie kell a Stretchet a kiszolgálón és az adatbázisban. További információ: Stretch Database engedélyezése adatbázis-.
engedélyek. A Stretch adatbázishoz vagy táblához való engedélyezéséhez db_owner engedélyre van szükség. A Stretch táblához való engedélyezéséhez ALTER-engedélyekre is szükség van a táblán.
[ FILTER_PREDICATE = { NULL | predikátum } ]
Az: SQL Server 2016 (13.x) és újabb verziókra vonatkozik.
Megadhat egy szűrő predikátumot, amely kijelöli a korábbi és az aktuális adatokat tartalmazó táblából áttelepítendő sorokat. A predikátumnak egy determinisztikus beágyazott táblaértékű függvényt kell meghívnia. További információ: Stretch Database engedélyezése tábla és Migrálandó sorok kijelölése szűrőfüggvény használatával.
Fontos
Ha olyan szűrő predikátumot ad meg, amely rosszul teljesít, az adatmigrálás is rosszul teljesít. A Stretch Database a KERESZT ALKALMAZ operátorral alkalmazza a szűrő predikátumát a táblára.
Ha nem ad meg szűrő predikátumot, a rendszer a teljes táblát migrálja.
Szűrő predikátum megadásakor MIGRATION_STATEis meg kell adnia.
MIGRATION_STATE = { KIMENŐ | BEJÖVŐ | SZÜNETELTETVE }
A következővonatkozik: SQL Server 2016 (13.x) és újabb, Azure SQL Database és felügyelt Azure SQL-példány.
Adja meg
OUTBOUND
az adatok SQL Serverről Azure SQL Database-be való migrálásához.Adja meg
INBOUND
, hogy a tábla távoli adatait az Azure SQL Database-ből visszamásolja az SQL Serverre, és letiltsa a Stretchet a táblához. További információ: Stretch Database letiltása és távoli adatok visszahozása.Ez a művelet adatátviteli költségekkel jár, és nem szakítható meg.
Adja meg az adatmigrálás szüneteltetéséhez vagy elhalasztásához
PAUSED
. További információ: Adatmigrálás szüneteltetése és folytatása -Stretch Adatbázis-.
[ DATA_DELETION = ON { ( FILTER_COLUMN = column_name, RETENTION_PERIOD = { VÉGTELEN | szám { NAP | NAPOK | HÉT | HETEK | HÓNAP | HÓNAPOK | ÉV | YEARS } ) } ]
Csak az Azure SQL Edge vonatkozik
Lehetővé teszi a régi vagy elavult adatok adatmegőrzési szabályzaton alapuló törlését az adatbázis tábláiból. További információ: Adatmegőrzés engedélyezése és letiltása. Az adatmegőrzés engedélyezéséhez a következő paramétereket kell megadni.
FILTER_COLUMN = { column_name }
Megadja azt az oszlopot, amellyel megállapíthatja, hogy a tábla sorai elavultak-e vagy sem. A szűrőoszlophoz a következő adattípusok engedélyezettek.
- dátum
- datetime
- datetime2
- smalldatetime
- datetimeoffset
RETENTION_PERIOD = { VÉGTELEN | szám {NAP | NAPOK | HÉT | HETEK | HÓNAP | HÓNAPOK | ÉV | YEARS }}
A tábla megőrzési időszakának szabályzatát adja meg. A megőrzési időtartam egy pozitív egész szám és a dátum részegység kombinációjaként van megadva.
MEMORY_OPTIMIZED
A következővonatkozik: SQL Server 2014 (12.x) és újabb, Azure SQL Database és felügyelt Azure SQL-példány. A felügyelt Azure SQL-példány nem támogatja a memóriaoptimalizált táblákat az általános célú szinten.
Az ON érték azt jelzi, hogy a tábla memóriaoptimalizált. A memóriaoptimalizált táblák az In-Memory OLTP szolgáltatás részét képezik, amely a tranzakciófeldolgozás teljesítményének optimalizálására szolgál. Az OLTP In-Memory használatának első lépéseit az 1. rövid útmutatóban talál: In-Memory OLTP Technologies for Faster Transact-SQL Performance. A memóriaoptimalizált táblákról részletesebb információt Memory-Optimized Táblákcímű témakörben talál.
Az alapértelmezett KI érték azt jelzi, hogy a tábla lemezalapú.
TARTÓSSÁG
A következővonatkozik: SQL Server 2014 (12.x) és újabb, Azure SQL Database és felügyelt Azure SQL-példány.
A SCHEMA_AND_DATA
értéke azt jelzi, hogy a tábla tartós, ami azt jelenti, hogy a módosítások megmaradnak a lemezen, és túlélik az újraindítást vagy a feladatátvételt. SCHEMA_AND_DATA az alapértelmezett érték.
A SCHEMA_ONLY
értéke azt jelzi, hogy a tábla nem tartós. A táblaséma megmarad, de az adatfrissítések nem maradnak meg az adatbázis újraindítása vagy feladatátvétele során.
DURABILITY = SCHEMA_ONLY
csak MEMORY_OPTIMIZED = ON
engedélyezett.
Figyelmeztetés
Ha egy táblát DURABILITY = SCHEMA_ONLY
hoz létre, és READ_COMMITTED_SNAPSHOT
később ALTER DATABASE
módosít, a tábla adatai elvesznek.
BUCKET_COUNT
A következővonatkozik: SQL Server 2014 (12.x) és újabb, Azure SQL Database és felügyelt Azure SQL-példány.
A kivonatindexben létrehozandó gyűjtők számát jelzi. A kivonatindexek BUCKET_COUNT maximális értéke 1 073 741 824. További információ a gyűjtők számáról: Memory-Optimized Táblák indexei.
Bucket_count kötelező argumentum.
INDEX
A következővonatkozik: SQL Server 2014 (12.x) és újabb, Azure SQL Database és felügyelt Azure SQL-példány.
Az oszlop- és táblaindexek a CREATE TABLE utasítás részeként adhatók meg. A memóriaoptimalizált táblák indexeinek hozzáadásáról és eltávolításáról további információt Memory-Optimized táblák módosítása
FASÍROZ
A következővonatkozik: SQL Server 2014 (12.x) és újabb, Azure SQL Database és felügyelt Azure SQL-példány.
Azt jelzi, hogy létrejön egy HASH-index.
A kivonatindexek csak a memóriaoptimalizált táblákban támogatottak.
LEDGER = ON ( <ledger_option> [ ,... n ] ) | KI
A következőkre vonatkozik: SQL Server 2022 (16.x), Azure SQL Database és felügyelt Azure SQL-példány.
Jegyzet
Ha a kimutatás létrehoz egy főkönyvi táblát, a ENABLE LEDGER
engedélyre van szükség.
Azt jelzi, hogy a létrehozott tábla egy főkönyvtábla (BE) vagy sem (KI). Az alapértelmezett érték ki van kapcsolva. Ha a APPEND_ONLY = ON
beállítás meg van adva, a rendszer létrehoz egy csak hozzáfűző naplótáblát, amely csak új sorok beszúrását teszi lehetővé. Ellenkező esetben a rendszer létrehoz egy frissíthető főkönyvtáblát. Az frissíthető főkönyvtáblákhoz szükség van a SYSTEM_VERSIONING = ON
argumentumra is. Az frissíthető főkönyvtábláknak rendszerverziós táblának is kell lenniük. Az frissíthető főkönyvtábláknak azonban nem kell ideiglenes táblának lenniük (nincs szükség a PERIOD FOR SYSTEM_TIME
paraméterre). Ha az előzménytábla LEDGER = ON
és SYSTEM_VERSIONING = ON
van megadva, akkor nem hivatkozhatja meglévő táblára.
A főkönyv-adatbázis (a LEDGER = ON
beállítással létrehozott adatbázis) csak a főkönyvtáblák létrehozását teszi lehetővé. Ha LEDGER = OFF
táblát próbál létrehozni, az hibát fog okozni. Minden új tábla alapértelmezés szerint frissíthető főkönyvtáblaként jön létre, még akkor is, ha nem adja meg a LEDGER = ON
, és az összes többi paraméter alapértelmezett értékével jön létre.
Az frissíthető főkönyvtábláknak négy GENERATED ALWAYS
oszlopot kell tartalmazniuk, pontosan egy oszlopot, amelyek az alábbi argumentumok mindegyikével definiálhatók:
GENERATED ALWAYS AS TRANSACTION_ID START
GENERATED ALWAYS AS TRANSACTION_ID END
GENERATED ALWAYS AS SEQUENCE_NUMBER START
GENERATED ALWAYS AS SEQUENCE_NUMBER END
A csak hozzáfűző naplótábláknak pontosan egy oszlopot kell tartalmazniuk, amely az alábbi argumentumok mindegyikével van definiálva:
GENERATED ALWAYS AS TRANSACTION_ID START
GENERATED ALWAYS AS SEQUENCE_NUMBER START
Ha az CREATE TABLE
utasítás nem definiálja a kötelezően létrehozott minden oszlopot, és az utasítás LEDGER = ON
is tartalmaz, a rendszer automatikusan megpróbálja hozzáadni az oszlopot az alábbi listából származó megfelelő oszlopdefinícióval. Ha egy névütközés van egy már definiált oszlopmal, a rendszer hibát fog okozni.
[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
A <ledger_view_option> megadja a sémát és a főkönyvi nézet nevét, a rendszer automatikusan létrehozza és a táblára hivatkozik. Ha a beállítás nincs megadva, a rendszer úgy hozza létre a főkönyvi nézet nevét, hogy hozzáfűzi a _Ledger
a létrehozott tábla nevéhez (database_name.schema_name.table_name
). Ha a megadott vagy létrehozott névvel rendelkező nézet létezik, a rendszer hibát fog okozni. Ha a tábla egy frissíthető főkönyvtábla, a főkönyvnézet egyesítőként jön létre a táblában és annak előzménytáblájában.
A főkönyvi nézetben minden sor egy sorverzió létrehozását vagy törlését jelöli a főkönyvtáblában. A főkönyvi nézet a főkönyvtábla összes oszlopát tartalmazza, kivéve a fent felsorolt létrehozott mindig oszlopokat. A főkönyv nézet a következő további oszlopokat is tartalmazza:
Oszlop neve | Adattípus | Leírás |
---|---|---|
A TRANSACTION_ID_COLUMN_NAME beállítással van megadva.
ledger_transaction_id , ha nincs megadva. |
bigint | A sorverziót létrehozó vagy törölt tranzakció azonosítója. |
A SEQUENCE_NUMBER_COLUMN_NAME beállítással van megadva.
ledger_sequence_number , ha nincs megadva. |
bigint | Egy sorszintű művelet sorszáma a tábla tranzakcióján belül. |
A OPERATION_TYPE_COLUMN_NAME beállítással van megadva.
ledger_operation_type , ha nincs megadva. |
tinyint |
1 (INSERT ) vagy 2 (DELETE ) tartalmaz. Ha beszúr egy sort a főkönyvtáblába, új sort hoz létre az oszlopban 1 tartalmazó főkönyvi nézetben. Ha töröl egy sort a főkönyvtáblából, az új sort az oszlopban 2 tartalmazó főkönyvi nézetben hozza létre. A főkönyvi tábla egy sorának frissítése két új sort hoz létre a főkönyv nézetben. Az egyik sor 2 (DELETE ) és a másik sor ebben az oszlopban 1 (INSERT ) tartalmaz. |
A OPERATION_TYPE_DESC_COLUMN_NAME beállítással van megadva.
ledger_operation_type_desc , ha nincs megadva. |
nvarchar(128) |
INSERT vagy DELETE tartalmaz. Részletekért lásd fentebb. |
A főkönyvtáblát tartalmazó tranzakciókat sys.database_ledger_transactionsrögzíti a rendszer.
<ledger_option> ::=
A egy főkönyv-beállítást ad meg.
[ LEDGER_VIEW = schema_name.ledger_view_name [ ( <ledger_view_option> [ ,... n ] ) ]
Megadja a főkönyv nézet nevét és a rendszer által a főkönyv nézethez hozzáadott további oszlopok nevét.
[ APPEND_ONLY = ON | KI ]
Megadja, hogy a létrehozott főkönyvtábla csak hozzáfűzhető vagy frissíthető-e. Az alapértelmezett érték a OFF
.
<ledger_view_option> ::=
Egy vagy több főkönyvnézeti beállítást ad meg. A főkönyvnézet minden egyes beállításában meg van adva egy oszlop neve, a rendszer hozzáadja a nézethez a főkönyvtáblában definiált oszlopok mellett.
[ TRANSACTION_ID_COLUMN_NAME = transaction_id_column_name ]
Megadja annak az oszlopnak a nevét, amely a sorverziót létrehozó vagy törölt tranzakció azonosítóját tárolja. Az alapértelmezett oszlopnév ledger_transaction_id
.
[ SEQUENCE_NUMBER_COLUMN_NAME = sequence_number_column_name ]
Megadja annak az oszlopnak a nevét, amely egy sorszintű művelet sorszámát tárolja a táblában lévő tranzakcióban. Az alapértelmezett oszlopnév ledger_sequence_number
.
[ OPERATION_TYPE_COLUMN_NAME = operation_type_id column_name ]
Megadja a művelettípus-azonosítót tartalmazó oszlopok nevét. Az alapértelmezett oszlopnév ledger_operation_type.
[ OPERATION_TYPE_DESC_COLUMN_NAME = operation_type_desc_column_name ]
Megadja a művelettípus leírását tartalmazó oszlopok nevét. Az alapértelmezett oszlopnév ledger_operation_type_desc
.
Megjegyzések
Az engedélyezett táblák, oszlopok, korlátozások és indexek számáról az SQL Server maximális kapacitásspecifikációi című témakörben olvashat.
A tér általában táblák és indexek számára van lefoglalva, egyenként egy léptékben. Ha az ALTER DATABASE
SET MIXED_PAGE_ALLOCATION
beállítása IGAZ, vagy mindig az SQL Server 2016 előtt (13.x) van beállítva egy tábla vagy index létrehozásakor, a rendszer a vegyes kiterjedésű lapokhoz rendeli az oldalakat, amíg nincs elegendő lapja az egységes terjedelem kitöltéséhez. Miután elegendő oldallal rendelkezik az egységes terjedelem kitöltéséhez, a rendszer minden alkalommal lefoglal egy másik mértéket, amikor a jelenleg kiosztott mértékek megtelnek. A tábla által lefoglalt és felhasznált terület mennyiségéről szóló jelentéshez hajtsa végre a sp_spaceused
.
Az adatbázismotor nem kényszeríti ki azt a sorrendet, amelyben az ALAPÉRTELMEZETT, AZ IDENTITY, a ROWGUIDCOL vagy az oszlopkorlátok meg vannak adva egy oszlopdefinícióban.
Amikor létrehoz egy táblát, az IDÉZŐJELES AZONOSÍTÓ beállítás mindig BE értékként lesz tárolva a tábla metaadataiban, még akkor is, ha a beállítás KI értékre van állítva a tábla létrehozásakor.
A Microsoft Fabric SQL Database-ben néhány táblafunkció létrehozható, de nem tükrözve a Fabric OneLake. További információ: Fabric SQL-adatbázis tükrözésének korlátozásai.
Ideiglenes táblák
Létrehozhat helyi és globális ideiglenes táblákat. A helyi ideiglenes táblák csak az aktuális munkamenetben láthatók, a globális ideiglenes táblák pedig minden munkamenetben láthatók. Az ideiglenes táblák nem particionálhatók.
A helyi ideiglenes táblanevek előtagja egyetlen számjellel (#table_name
) és globális ideiglenes táblanevek kettős számjellel (##table_name
).
Transact-SQL utasítások az ideiglenes táblára hivatkoznak a CREATE TABLE
utasításban megadott table_name érték használatával, például:
CREATE TABLE #MyTempTable
(
col1 INT PRIMARY KEY
);
INSERT INTO #MyTempTable
VALUES (1);
Ha egynél több ideiglenes tábla jön létre egyetlen tárolt eljárásban vagy kötegben, akkor eltérő névvel kell rendelkezniük.
Ha egy ideiglenes tábla létrehozásakor vagy elérésekor schema_name ad hozzá, a rendszer figyelmen kívül hagyja. Az összes ideiglenes tábla a dbo
sémában jön létre.
Ha egy helyi ideiglenes tábla egy tárolt eljárásban vagy EGY SQL-modulban jön létre, amelyet egyszerre több munkamenet is végrehajthat, az adatbázismotornak képesnek kell lennie megkülönböztetni a különböző munkamenetek által létrehozott táblákat. Az adatbázismotor ezt úgy teszi, hogy belsőleg hozzáfűz egy egyedi utótagot az egyes helyi ideiglenes táblanevekhez. A tempdb
sys.objects
táblájában tárolt ideiglenes tábla teljes neve a CREATE TABLE
utasításban megadott táblanévből és a rendszer által generált egyedi utótagból áll. Az utótag engedélyezéséhez a helyi ideiglenes névhez megadott table_name nem haladhatja meg a 116 karaktert.
A rendszer automatikusan elveti az ideiglenes táblákat a hatókörből való kikerüléskor, kivéve, ha a korábban kifejezetten elvetett táblákat a DROP TABLE
:
- A tárolt eljárásban létrehozott helyi ideiglenes táblákat a rendszer automatikusan elveti, amikor a tárolt eljárás befejeződött. A táblára bármely beágyazott tárolt eljárás hivatkozhat, amelyet a táblát létrehozó tárolt eljárás hajt végre. A táblára nem hivatkozhat az a folyamat, amely a táblát létrehozó tárolt eljárást hívta.
- A rendszer automatikusan elveti az összes többi helyi ideiglenes táblát az aktuális munkamenet végén.
- Ha a
GLOBAL_TEMPORARY_TABLE_AUTO_DROP
adatbázis-hatókörű konfiguráció ON (alapértelmezett) értékre van állítva, akkor a rendszer automatikusan elveti a globális ideiglenes táblákat, amikor a táblát létrehozó munkamenet véget ér, és az összes többi tevékenység nem hivatkozik rájuk. A tevékenység és a tábla közötti társítás csak egyetlen Transact-SQL utasítás élettartama alatt marad fenn. Ez azt jelenti, hogy a rendszer egy globális ideiglenes táblát elvet az utolsó Transact-SQL utasítás befejezésekor, amely aktívan hivatkozik a táblára a létrehozási munkamenet befejezésekor. - Ha a
GLOBAL_TEMPORARY_TABLE_AUTO_DROP
adatbázis-hatókörű konfiguráció ki , akkor a rendszer csak aDROP TABLE
használatával elveti a globális ideiglenes táblákat, vagy amikor az adatbázismotor-példány újraindul. További információ: GLOBAL_TEMPORARY_TABLE_AUTO_DROP.
Egy tárolt eljárásban vagy eseményindítóban létrehozott helyi ideiglenes tábla neve megegyezhet a tárolt eljárás vagy eseményindító meghívása előtt létrehozott ideiglenes táblával. Ha azonban egy lekérdezés egy ideiglenes táblára hivatkozik, és két azonos nevű ideiglenes tábla is létezik, akkor nem határozza meg, hogy melyik táblával oldja fel a lekérdezést. A beágyazott tárolt eljárások olyan ideiglenes táblákat is létrehozhatnak, amelyek neve megegyezik a hívással tárolt eljárás által létrehozott ideiglenes táblával. Ahhoz azonban, hogy a beágyazott eljárásban létrehozott tábla módosításai feloldódjanak, a táblának ugyanazzal a struktúrával kell rendelkeznie, ugyanazokkal az oszlopnevekkel, mint a hívó eljárásban létrehozott táblának. Ez az alábbi példában látható.
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
Itt van az eredményhalmaz.
(1 row(s) affected)
Test1Col
-----------
1
(1 row(s) affected)
Test2Col
-----------
2
Helyi vagy globális ideiglenes táblák létrehozásakor a CREATE TABLE
szintaxis a FOREIGN KEY
korlátozások kivételével támogatja a kényszerdefiníciókat. Ha egy ideiglenes táblában FOREIGN KEY
korlátozás van megadva, az utasítás egy figyelmeztető üzenetet ad vissza, amely közli, hogy a kényszert kihagyták. A tábla továbbra is FOREIGN KEY
korlátozás nélkül jön létre. Az ideiglenes táblákra nem lehet hivatkozni FOREIGN KEY
korlátozásokban.
Ha egy ideiglenes tábla nevesített korlátozással jön létre, és az ideiglenes tábla egy felhasználó által definiált tranzakció hatókörén belül jön létre, egyszerre csak egy felhasználó hajthatja végre az ideiglenes táblát létrehozó utasítást. Ha például egy tárolt eljárás létrehoz egy ideiglenes táblát egy nevesített elsődlegeskulcs-korlátozással, akkor a tárolt eljárást nem lehet egyszerre több felhasználó végrehajtani.
Adatbázis-hatókörű globális ideiglenes táblák az Azure SQL Database-ben
Az SQL Server globális ideiglenes táblái (##
előtaggal ellátott táblanevek) tempdb
vannak tárolva, és a teljes SQL Server-példány összes felhasználói munkamenete között meg vannak osztva.
Az Azure SQL Database támogatja azokat a globális ideiglenes táblákat, amelyek szintén tempdb
vannak tárolva, de hatóköre az adatbázis szintjén van. Ez azt jelenti, hogy a globális ideiglenes táblák meg vannak osztva az ugyanazon az adatbázison belüli összes felhasználói munkamenet között. Más adatbázisok felhasználói munkamenetei nem férnek hozzá a globális ideiglenes táblákhoz. Ellenkező esetben az Azure SQL Database globális ideiglenes táblái ugyanazt a szintaxist és szemantikát követik, amelyet az SQL Server használ.
Hasonlóképpen, a globális ideiglenes tárolt eljárások az Azure SQL Database adatbázisszintre is kiterjednek.
A helyi ideiglenes táblák (#
előtaggal ellátott táblanevek) szintén támogatottak az Azure SQL Database-ben, és ugyanazt a szintaxist és szemantikát követik, amelyet az SQL Server használ. További információ: Ideiglenes táblák.
Ideiglenes objektumok engedélyei
Bármely felhasználó létrehozhat és hozzáférhet ideiglenes objektumokhoz.
Particionált táblák
Mielőtt particionált táblát hoz létre a CREATE TABLE használatával, először létre kell hoznia egy partíciófüggvényt a tábla particionálási módjának megadásához. A partíciófüggvények létrehozása CREATE PARTITION FUNCTIONhasználatával történik. Másodszor létre kell hoznia egy partíciós sémát a partíciófüggvény által jelzett partíciókat tartalmazó fájlcsoportok megadásához. A partíciós séma CREATE PARTITION SCHEMEhasználatával jön létre. A particionált táblákhoz nem adható meg ELSŐDLEGES KULCS vagy EGYEDI korlátozás elhelyezése külön fájlcsoportokhoz. További információ: particionált táblák és indexek.
ELSŐDLEGES KULCS korlátozásai
A táblák csak egy ELSŐDLEGES KULCS kényszert tartalmazhatnak.
Az ELSŐDLEGES KULCS kényszer által létrehozott index nem okozhatja, hogy a táblában lévő indexek száma meghaladja a 999 nemclustered indexet és 1 fürtözött indexet.
Ha a CLUSTERED vagy a NONCLUSTERED nincs megadva elsődleges kulcskényszerhez, akkor a FÜRTÖZÖTT függvényt akkor használja a rendszer, ha nincsenek megadva fürtözött indexek az EGYEDI korlátozásokhoz.
Az ELSŐDLEGES KULCS kényszerben definiált összes oszlopot NOT NULL értékként kell definiálni. Ha nincs megadva null értékű, az ELSŐDLEGES KULCS kényszerben részt vevő összes oszlop nullképessége NOT NULL értékre van állítva.
Jegyzet
Memóriaoptimalizált táblák esetén a null értékű kulcs oszlopa engedélyezett.
Ha egy felhasználó által definiált CLR-típusoszlopon elsődleges kulcs van definiálva, a típus implementálásának támogatnia kell a bináris rendezést. További információ: CLR User-Defined Types.
EGYEDI korlátozások
- Ha a CLUSTERED vagy a NONCLUSTERED nincs megadva egyedi korlátozáshoz, a NONCLUSTERED függvény alapértelmezés szerint használható.
- Minden EGYEDI kényszer létrehoz egy indexet. Az EGYEDI korlátozások száma nem okozhatja, hogy a táblában lévő indexek száma meghaladja a 999 nemclustered indexet és 1 fürtözött indexet.
- Ha a CLR felhasználó által definiált típusoszlopán egyedi korlátozás van meghatározva, a típus implementációjának támogatnia kell a bináris vagy operátoralapú rendezést. További információ: CLR User-Defined Types.
KÜLFÖLDI KULCS korlátozásai
Ha a KÜLSŐ KULCS kényszer oszlopába nem NULL értéket ad meg, az értéknek a hivatkozott oszlopban kell lennie; ellenkező esetben a rendszer idegenkulcs-megsértési hibaüzenetet ad vissza.
A KÜLSŐ KULCS megkötései az előző oszlopra lesznek alkalmazva, kivéve, ha a forrásoszlopok meg vannak adva.
A KÜLFÖLDI KULCS megkötések csak az ugyanazon a kiszolgálón található adatbázison belüli táblákra hivatkozhatnak. Az adatbázisközi hivatkozási integritást eseményindítókon keresztül kell megvalósítani. További információ: CREATE TRIGGER.
A KÜLFÖLDI KULCS megkötések hivatkozhatnak egy másik oszlopra ugyanabban a táblában. Ezt önhivatkozásnak nevezzük.
Az oszlopszintű FOREIGN KEY kényszer HIVATKOZÁS záradéka csak egy referenciaoszlopot listázhat. Ennek az oszlopnak ugyanazzal az adattípussal kell rendelkeznie, mint a kényszert definiáló oszlopnak.
A táblaszintű FOREIGN KEY kényszer HIVATKOZÁS záradékának ugyanannyi hivatkozási oszlopmal kell rendelkeznie, mint a kényszeroszlopok listájában szereplő oszlopok számának. Az egyes referenciaoszlopok adattípusának meg kell egyeznie az oszloplista megfelelő oszlopával is. A referenciaoszlopokat ugyanabban a sorrendben kell megadni, mint amelyet az elsődleges kulcs oszlopainak vagy a hivatkozott tábla egyedi korlátozásának megadásakor használtak.
A CASCADE, a SET NULL vagy a SET DEFAULT nem adható meg, ha egy időbélyeget típusú oszlop az idegen kulcs vagy a hivatkozott kulcs része.
A CASCADE, a SET NULL, a SET DEFAULT és a NO ACTION olyan táblákon kombinálható, amelyek hivatkozási kapcsolatban vannak egymással. Ha az adatbázismotor NEM LÉP FEL, leállítja és visszaállítja a kapcsolódó CASCADE, a SET NULL és a SET DEFAULT műveleteket. Ha a DELETE utasítás a CASCADE, a SET NULL, a SET DEFAULT és a NO ACTION művelet kombinációját eredményezi, a rendszer a CASCADE, a SET NULL és a SET DEFAULT művelet összes műveletét alkalmazza, mielőtt az adatbázismotor bármilyen NO műveletet ellenőriz.
Az adatbázismotor nem rendelkezik előre definiált korláttal sem a táblákban található IDEGEN KULCS kényszerek számában, sem az adott táblára hivatkozó más táblák tulajdonában lévő IDEGEN KULCS kényszerek számával kapcsolatban.
Ennek ellenére a külső kulcsokra vonatkozó korlátozások tényleges számát a hardverkonfiguráció, valamint az adatbázis és az alkalmazás kialakítása korlátozza. Azt javasoljuk, hogy egy tábla legfeljebb 253 IDEGENKULCS-korlátozást tartalmazzon, és ne hivatkozzon rá 253-nál több IDEGENKULCS-korlátozással. A tényleges korlát az alkalmazástól és a hardvertől függően többé-kevésbé lehet. Az adatbázis és az alkalmazások tervezésekor vegye figyelembe a KÜLFÖLDI KULCS kényszereinek kikényszerítésének költségeit.
A KÜLSŐ KULCS korlátozásai nem lesznek kényszerítve ideiglenes táblákon.
A KÜLFÖLDI KULCS megkötések csak az ELSŐDLEGES KULCS vagy AZ EGYEDI megkötések oszlopaira hivatkozhatnak a hivatkozott táblában vagy a hivatkozott tábla EGYEDI INDEXében.
Ha egy felhasználó által definiált CLR-típusoszlopon idegen kulcs van definiálva, a típus implementációjának támogatnia kell a bináris rendezést. További információ: CLR User-Defined Types.
Az idegenkulcs-kapcsolatban részt vevő oszlopokat azonos hosszúságú és skálázású módon kell definiálni.
ALAPÉRTELMEZETT definíciók
Egy oszlop csak egy ALAPÉRTELMEZETT definícióval rendelkezhet.
Az ALAPÉRTELMEZETT definíciók tartalmazhatnak állandó értékeket, függvényeket, SQL standard nilad függvényeket vagy
NULL
. Az alábbi táblázat az INSERT utasítás során az alapértelmezett értékként visszaadott niladikus függvényeket és értékeket mutatja be.SQL-92 niladic függvény Visszaadott érték CURRENT_TIMESTAMP
Aktuális dátum és idő. CURRENT_USER
A beszúrást végrehajtó felhasználó neve. SESSION_USER
A beszúrást végrehajtó felhasználó neve. SYSTEM_USER
A beszúrást végrehajtó felhasználó neve. USER
A beszúrást végrehajtó felhasználó neve. constant_expression ALAPÉRTELMEZETT definícióban nem hivatkozhat a táblázat egy másik oszlopára, illetve más táblákra, nézetekre vagy tárolt eljárásokra.
AZ ALAPÉRTELMEZETT definíciók nem hozhatók létre időbélyeggel adattípussal vagy IDENTITÁS tulajdonsággal rendelkező oszlopokon.
Az alapértelmezett definíciók nem hozhatók létre alias adattípusú oszlopokhoz, ha az alias adattípusa egy alapértelmezett objektumhoz van kötve.
CHECK-korlátozások
Az oszlopok tetszőleges számú CHECK-korlátozással rendelkezhetnek, és a feltétel több logikai kifejezést is tartalmazhat az AND és AZ függvényekkel kombinálva. Egy oszlop több CHECK-korlátozását érvényesíti a rendszer a létrehozásuk sorrendjében.
A keresési feltételnek logikai kifejezésre kell kiértékelnie, és nem hivatkozhat másik táblára.
Az oszlopszintű CHECK kényszer csak a korlátozott oszlopra hivatkozhat, a táblaszintű CHECK kényszer pedig csak az ugyanabban a táblában lévő oszlopokra hivatkozhat.
A CHECK CONSTRAINTS és a szabályok ugyanazt a funkciót szolgálják, mint az adatok ellenőrzése az INSERT és AZ UPDATE utasítások során.
Ha egy oszlophoz vagy oszlophoz szabály és egy vagy több CHECK korlátozás létezik, a rendszer minden korlátozást kiértékel.
A CHECK korlátozások nem határozhatók meg szöveges, vagy kép oszlopokon.
További kényszerinformációk
- A korlátozáshoz létrehozott indexet nem lehet elvetni a
DROP INDEX
; a kényszertALTER TABLE
használatával kell elvetni. A kényszerhez létrehozott és használt indexekALTER INDEX ... REBUILD
használatával újraépíthetők. További információ: Indexek átrendezése és újraépítése. - A kényszerneveknek követnie kell azonosítókszabályait, azzal a kivétellel, hogy a név nem kezdődhet számjellel (#). Ha constraint_name nincs megadva, a rendszer által létrehozott név lesz hozzárendelve a kényszerhez. A kényszer neve megjelenik a kényszer megsértéseiről szóló hibaüzenetekben.
- Ha egy
INSERT
,UPDATE
vagyDELETE
utasításban megsért egy korlátozást, az utasítás véget ér. Ha azonban aSET XACT_ABORT
KI értékre van állítva, a tranzakció , ha az utasítás egy explicit tranzakció része, továbbra is feldolgozásra kerül. HaSET XACT_ABORT
BE értékre van állítva, a teljes tranzakció vissza lesz állítva. AROLLBACK TRANSACTION
utasítást a tranzakciódefinícióval is használhatja a@@ERROR
rendszerfüggvény ellenőrzésével. - Ha
ALLOW_ROW_LOCKS = ON
ésALLOW_PAGE_LOCK = ON
, sor-, oldal- és táblázatszintű zárolások engedélyezettek az index elérésekor. Az adatbázismotor kiválasztja a megfelelő zárolást, és eszkalálhatja a zárolást egy sor- vagy oldalzárolásról egy táblázatzárolásra. HaALLOW_ROW_LOCKS = OFF
ésALLOW_PAGE_LOCK = OFF
, az index elérésekor csak táblaszintű zárolás engedélyezett. - Ha egy tábla IDEGEN KULCSOT vagy CHECK CONSTRAINTS és triggereket tartalmaz, a kényszerfeltételek kiértékelése az eseményindító végrehajtása előtt történik.
Egy táblán és annak oszlopaiban lévő jelentésekhez használja a sp_help
vagy a sp_helpconstraint
. Tábla átnevezéséhez használja a sp_rename
. A tábláktól függő nézetekről és tárolt eljárásokról készült jelentéshez használja a sys.dm_sql_referenced_entities és a sys.dm_sql_referencing_entities.
Nullability rules within a table definition
Az oszlop nullképessége határozza meg, hogy az oszlop engedélyezi-e a null értéket (NULL
) az oszlop adataiként.
NULL
nem nulla vagy üres: NULL
azt jelenti, hogy nem történt bejegyzés, vagy explicit NULL
kapott, és általában azt jelenti, hogy az érték ismeretlen vagy nem alkalmazható.
Ha CREATE TABLE
vagy ALTER TABLE
használatával hoz létre vagy módosít egy táblát, az adatbázis- és munkamenet-beállítások befolyásolják és esetleg felülbírálják az oszlopdefinícióban használt adattípus nullbilitását. Javasoljuk, hogy mindig explicit módon definiáljon NULL vagy NOT NULL értéket a nem megfelelő oszlopokhoz, vagy ha felhasználó által definiált adattípust használ, akkor engedélyezze az oszlop számára az adattípus alapértelmezett nullképességét. A ritka oszlopoknak mindig engedélyeznie kell a NULL értéket.
Ha az oszlop nullbilitása nincs explicit módon megadva, az oszlop nullbilitása az alábbi táblázatban látható szabályokat követi.
Oszlop adattípusa | Szabály |
---|---|
Alias adattípusa | Az adatbázismotor az adattípus létrehozásakor megadott null értéket használja. Az adattípus alapértelmezett nullértékének meghatározásához használja a sp_help . |
CLR felhasználó által definiált típus | A nullitás az oszlopdefiníció alapján van meghatározva. |
Rendszer által megadott adattípus | Ha a rendszer által megadott adattípus csak egy lehetőséggel rendelkezik, elsőbbséget élvez.
időbélyeg adattípusok nem lehetnek NULL értékűek. Ha a munkamenet-beállítások be vannak kapcsolva a SET használatával:ANSI_NULL_DFLT_ON = ON , null érték van hozzárendelve.ANSI_NULL_DFLT_OFF = ON , a NOT NULL van hozzárendelve.Ha az adatbázis-beállítások ALTER DATABASE használatával vannak konfigurálva:ANSI_NULL_DEFAULT_ON = ON , null érték van hozzárendelve.ANSI_NULL_DEFAULT_OFF = ON , a NOT NULL van hozzárendelve.A ANSI_NULL_DEFAULT adatbázis-beállításának megtekintéséhez használja a sys.databases katalógusnézetet |
Ha a munkamenethez egyik ANSI_NULL_DFLT beállítás sincs beállítva, és az adatbázis alapértelmezett értékre van állítva (ANSI_NULL_DEFAULT ki van kapcsolva), a NOT NULL alapértelmezett értéke lesz hozzárendelve.
Ha az oszlop számított oszlop, annak nullképességét mindig az adatbázismotor határozza meg automatikusan. Az ilyen típusú oszlopok érvénytelenségének megállapításához használja a COLUMNPROPERTY
függvényt a AllowsNull tulajdonsággal.
Jegyzet
Az SQL Server ODBC-illesztője és az SQL Server OLE DB-illesztő alapértelmezés szerint ANSI_NULL_DFLT_ON be van állítva. Az ODBC- és OLE DB-felhasználók konfigurálhatják ezt ODBC-adatforrásokban, vagy az alkalmazás által beállított kapcsolati attribútumokkal vagy tulajdonságokkal.
Adattömörítés
A rendszertáblák tömörítése nem engedélyezhető. Táblázat létrehozásakor az adattömörítés NINCS értékre van állítva, kivéve, ha másként van megadva. Ha megadja a partíciók vagy a tartományon kívüli partíciók listáját, a rendszer hibát fog generálni. További információ az adattömörítésről: Adattömörítési.
Annak kiértékeléséhez, hogy a tömörítési állapot módosítása milyen hatással lesz egy táblára, indexre vagy partícióra, használja a sp_estimate_data_compression_savings tárolt eljárást.
Engedélyek
CREATE TABLE
engedélyt igényel az adatbázisban, és ALTER
engedélyt arra a sémára, amelyben a tábla létrejön.
Ha a CREATE TABLE
utasítás bármely oszlopa felhasználó által definiált típusként van definiálva, REFERENCES
felhasználó által definiált típusra vonatkozó engedély szükséges.
Ha a CREATE TABLE
utasítás bármely oszlopa felhasználó által definiált CLR-típusként van definiálva, akkor a típus tulajdonjoga vagy REFERENCES
engedély szükséges hozzá.
Ha a CREATE TABLE
utasítás bármely oszlopához XML-sémagyűjtemény van társítva, az XML-sémagyűjtemény tulajdonjoga vagy REFERENCES
engedély szükséges hozzá.
Bármely felhasználó létrehozhat ideiglenes táblákat tempdb
.
Ha az utasítás létrehoz egy főkönyvi táblát, ENABLE LEDGER
engedélyre van szükség.
Példák
Egy. ELSŐDLEGES KULCS kényszerének létrehozása egy oszlopon
Az alábbi példa egy ELSŐDLEGES KULCS kényszer oszlopdefinícióját mutatja be a Employee
tábla EmployeeID
oszlopában lévő fürtözött indexkel. Mivel nincs megadva kényszernév, a rendszer megadja a kényszer nevét.
CREATE TABLE dbo.Employee
(
EmployeeID INT PRIMARY KEY CLUSTERED
);
B. IDEGEN KULCS megkötéseinek használata
Egy IDEGEN KULCS kényszer használatával hivatkozhat egy másik táblára. Az idegen kulcsok lehetnek egyoszlopos vagy többoszlopos kulcsok. Az alábbi példa egy egyoszlopos FOREIGN KEY kényszert mutat be a SalesOrderHeader
táblára, amely a SalesPerson
táblára hivatkozik. Csak a REFERENCES záradék szükséges egy egyoszlopos FOREIGN KEY kényszerhez.
SalesPersonID INT NULL REFERENCES SalesPerson(SalesPersonID)
A FOREIGN KEY záradékot is használhatja, és újra felhasználhatja az oszlopattribútumot. Az oszlop nevének nem kell megegyeznie mindkét táblában.
FOREIGN KEY (SalesPersonID) REFERENCES SalesPerson(SalesPersonID)
A többoszlopos kulcsmegkötések táblakorlátként jönnek létre. Az AdventureWorks2022
adatbázisban a SpecialOfferProduct
tábla egy többtényezős ELSŐDLEGES KULCSOT tartalmaz. Az alábbi példa bemutatja, hogyan hivatkozhat erre a kulcsra egy másik táblából; A explicit kényszer neve nem kötelező.
CONSTRAINT FK_SpecialOfferProduct_SalesOrderDetail
FOREIGN KEY (ProductID, SpecialOfferID)
REFERENCES SpecialOfferProduct (ProductID, SpecialOfferID)
C. EGYEDI korlátozások használata
AZ EGYEDI megkötések az egyediség kényszerítésére szolgálnak a nemprimáris kulcsoszlopokon. Az alábbi példa azt a korlátozást kényszeríti ki, hogy a Product
tábla Name
oszlopának egyedinek kell lennie.
Name NVARCHAR(100) NOT NULL
UNIQUE NONCLUSTERED
D. ALAPÉRTELMEZETT definíciók használata
Az alapértelmezett értékek akkor adnak meg értéket (az INSERT és AZ UPDATE utasításokkal), ha nincs megadva érték. Az AdventureWorks2022
adatbázis például tartalmazhat egy keresési táblát, amely felsorolja, hogy a különböző alkalmazottak a vállalatot betölthetik-e. Az egyes feladatokat leíró oszlopban az alapértelmezett karaktersztring leírást adhat meg, ha a tényleges leírás nincs explicit módon megadva.
DEFAULT 'New Position - title not formalized yet'
Az állandók mellett az ALAPÉRTELMEZETT definíciók függvényeket is tartalmazhatnak. Az alábbi példában lekérheti egy bejegyzés aktuális dátumát.
DEFAULT (GETDATE())
A niladic-function scan az adatintegritást is javíthatja. A sort beszúró felhasználó nyomon követéséhez használja a felhasználó niladic-függvényét. Ne mellékelje zárójelekkel a niladic függvényeket.
DEFAULT USER
E. CHECK-korlátozások használata
Az alábbi példa a Vendor
tábla CreditRating
oszlopába beírt értékekre vonatkozó korlátozást mutatja be. A kényszer nincs megnevesve.
CHECK (CreditRating >= 1 and CreditRating <= 5)
Ez a példa egy elnevezett kényszert mutat be, amely egy tábla oszlopába beírt karakteradatokra vonatkozó mintakorlátozással rendelkezik.
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]'
)
Ez a példa azt határozza meg, hogy az értékeknek egy adott listában kell lenniük, vagy egy megadott mintát kell követnie.
CHECK (
emp_id IN ('1389', '0736', '0877', '1622', '1756')
OR emp_id LIKE '99[0-9][0-9]'
)
F. A teljes tábladefiníció megjelenítése
Az alábbi példa a AdventureWorks2022
adatbázisban létrehozott PurchaseOrderDetail
tábla összes kényszerdefiníciójával rendelkező teljes tábladefiníciókat mutatja be. A minta futtatásához a táblaséma dbo
lesz.
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. Táblázat létrehozása XML-sémagyűjteménybe beírt XML-oszlopmal
Az alábbi példa egy xml
oszlopot tartalmazó táblát hoz létre, amely az XML-sémagyűjteménybe HRResumeSchemaCollection
van begépelve. A DOCUMENT
kulcsszó azt határozza meg, hogy a column_namexml
adattípusának minden példánya csak egy legfelső szintű elemet tartalmazhat.
CREATE TABLE HumanResources.EmployeeResumes
(
LName NVARCHAR (25),
FName NVARCHAR (25),
Resume XML(DOCUMENT HumanResources.HRResumeSchemaCollection)
);
H. Particionált tábla létrehozása
Az alábbi példa egy partíciófüggvényt hoz létre egy tábla vagy index négy partícióra való particionálásához. Ezután a példa létrehoz egy partíciós sémát, amely meghatározza azokat a fájlcsoportokat, amelyekben a négy partíció mindegyikét tárolni szeretné. Végül a példa létrehoz egy táblát, amely a partíciós sémát használja. Ez a példa feltételezi, hogy a fájlcsoportok már léteznek az adatbázisban.
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
A PartitionTable
oszlop col1
értékei alapján a partíciók a következő módokon vannak hozzárendelve.
Fájlcsoport | test1fg | test2fg | test3fg | test4fg |
---|---|---|---|---|
partíciós | 1 | 2 | 3 | 4 |
értékek | col 1 <= 1 |
col1 > 1 AND col1 <= 100 |
col1 > 100 AND col1 <= 1,000 |
col1 > 1000 |
Én. A UNIQUEIDENTIFIER adattípus használata egy oszlopban
Az alábbi példa egy uniqueidentifier
oszlopot tartalmazó táblát hoz létre. A példa ELSŐDLEGES KULCS kényszer használatával védi a táblát az ismétlődő értékeket beszúró felhasználóktól, és a DEFAULT
kényszer NEWSEQUENTIALID()
függvényét használja az új sorok értékeinek megadásához. A ROWGUIDCOL tulajdonság a uniqueidentifier
oszlopra van alkalmazva, hogy hivatkozni lehessen rá a $ROWGUID kulcsszóval.
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. Kifejezés használata számított oszlophoz
Az alábbi példa egy kifejezés ((low + high)/2
) használatát mutatja be a myavg
számított oszlop kiszámításához.
CREATE TABLE dbo.mytable
(
low INT,
high INT,
myavg AS (low + high) / 2
);
K. Számított oszlop létrehozása felhasználó által definiált típusoszlop alapján
Az alábbi példa egy olyan táblát hoz létre, amely egy, felhasználó által definiált típusú utf8string
definiált oszlopot tartalmaz, feltéve, hogy a típus szerelvénye és maga a típus már létrejött az aktuális adatbázisban. A második oszlop utf8string
alapján van definiálva, és típusú(osztály)utf8string
metódus ToString()
használatával számítja ki az oszlop értékét.
CREATE TABLE UDTypeTable
(
u UTF8STRING,
ustr AS u.ToString() PERSISTED
);
L. A USER_NAME függvény használata számított oszlophoz
Az alábbi példa a myuser_name
oszlop USER_NAME()
függvényét használja.
CREATE TABLE dbo.mylogintable
(
date_in DATETIME,
user_id INT,
myuser_name AS USER_NAME()
);
M. FILESTREAM oszlopot tartalmazó tábla létrehozása
Az alábbi példa egy FILESTREAM
oszlopot Photo
tartalmazó táblát hoz létre. Ha egy tábla egy vagy több FILESTREAM
oszlopot tartalmaz, a táblának egy ROWGUIDCOL
oszlopot kell tartalmaznia.
CREATE TABLE dbo.EmployeePhoto
(
EmployeeId INT NOT NULL PRIMARY KEY,
Photo VARBINARY (MAX) FILESTREAM NULL,
MyRowGuidColumn UNIQUEIDENTIFIER DEFAULT NEWID() ROWGUIDCOL NOT NULL UNIQUE
);
N. Sortömörítést használó táblázat létrehozása
Az alábbi példa egy sortömörítést használó táblát hoz létre.
CREATE TABLE dbo.T1
(
c1 INT,
c2 NVARCHAR (200)
)
WITH (DATA_COMPRESSION = ROW);
További adattömörítési példákért lásd adattömörítési.
O. XML-tömörítést használó táblázat létrehozása
A következővonatkozik: SQL Server 2022 (16.x) és újabb verziók, Azure SQL Database és felügyelt Azure SQL-példány.
Az alábbi példa egy XML-tömörítést használó táblát hoz létre.
CREATE TABLE dbo.T1
(
c1 INT,
c2 XML
)
WITH (XML_COMPRESSION = ON);
P. Ritka oszlopokat és oszlopkészletet tartalmazó táblázat létrehozása
Az alábbi példák bemutatják, hogyan hozható létre ritka oszlopot tartalmazó tábla, valamint két ritka oszlopot és egy oszlopkészletet tartalmazó táblázat. A példák az alapszintű szintaxist használják. Összetettebb példákért lásd: Ritka oszlopok használata és Oszlopkészletek használata.
Ez a példa egy ritka oszlopot tartalmazó táblát hoz létre.
CREATE TABLE dbo.T1
(
c1 INT PRIMARY KEY,
c2 VARCHAR (50) SPARSE NULL
);
Ez a példa létrehoz egy táblát, amely két ritka oszlopból és egy CSet
nevű oszlopkészletből áll.
CREATE TABLE T1
(
c1 INT PRIMARY KEY,
c2 VARCHAR (50) SPARSE NULL,
c3 INT SPARSE NULL,
CSet XML COLUMN_SET FOR ALL_SPARSE_COLUMNS
);
Q. Rendszerverziójú lemezalapú temporális tábla létrehozása
A következővonatkozik: SQL Server 2016 (13.x) és újabb, valamint Azure SQL Database.
Az alábbi példák bemutatják, hogyan hozható létre egy új előzménytáblához csatolt temporális tábla, és hogyan hozható létre egy temporális tábla egy meglévő előzménytáblához csatolva. A temporális táblának rendelkeznie kell egy elsődleges kulccsal ahhoz, hogy engedélyezve legyen a tábla a rendszer verziószámozásához. A rendszerverziók meglévő táblán való hozzáadását vagy eltávolítását bemutató példákért lásd a rendszerverzió-készítést a Példákcímű témakörben. Használati esetekért lásd temporális táblákat.
Ez a példa egy új előzménytáblához csatolt új időtáblát hoz létre.
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);
Ez a példa egy meglévő előzménytáblához csatolt új időbeli táblát hoz létre.
-- 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. Rendszerverzióra optimalizált memóriaoptimalizált temporális táblázat létrehozása
A következővonatkozik: SQL Server 2016 (13.x) és újabb, valamint Azure SQL Database.
Az alábbi példa bemutatja, hogyan hozható létre egy rendszerverzióra optimalizált memóriaoptimalizált temporális tábla, amely egy új lemezalapú előzménytáblához van csatolva.
Ez a példa egy új előzménytáblához csatolt új időtáblát hoz létre.
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));
Ez a példa egy meglévő előzménytáblához csatolt új időbeli táblát hoz létre.
-- 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. Tábla létrehozása titkosított oszlopokkal
Az alábbi példa két titkosított oszlopot tartalmazó táblát hoz létre. További információ: 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. Beágyazott szűrt index létrehozása
Beágyazott szűrt indexet tartalmazó táblázatot hoz létre.
CREATE TABLE t1
(
c1 INT,
INDEX IX1 (c1) WHERE c1 > 0
);
U. Beágyazott index létrehozása
Az alábbiakból megtudhatja, hogyan használható a NONCLUSTERED beágyazott a lemezalapú táblákhoz:
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. Ideiglenes tábla létrehozása névtelenül elnevezett összetett elsődleges kulccsal
Létrehoz egy táblát egy névtelenül elnevezett összetett elsődleges kulccsal. Ez hasznos az olyan futásidejű ütközések elkerülése érdekében, amelyekben két munkamenet-hatókörű ideiglenes tábla, amelyek mindegyike külön munkamenetben található, ugyanazt a nevet használja egy kényszerhez.
CREATE TABLE #tmp
(
c1 INT,
c2 INT,
PRIMARY KEY CLUSTERED ([c1], [c2])
);
GO
Ha explicit módon nevezi el a kényszert, a második munkamenet hibát okoz, például:
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.
A probléma abból adódik, hogy bár az ideiglenes tábla neve egyedi, a kényszernevek nem.
W. Globális ideiglenes táblák használata az Azure SQL Database-ben
Az A munkamenet létrehoz egy globális ideiglenes táblát ##test az Azure SQL Database testdb1-ben, és hozzáad egy sort
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';
Itt van az eredményhalmaz.
1253579504
A globális ideiglenes tábla nevének lekérése egy adott objektumazonosítóhoz 1253579504 tempdb
(2)
SELECT name
FROM tempdb.sys.objects
WHERE object_id = 1253579504;
Itt van az eredményhalmaz.
##test
A B munkamenet a testdb1 Azure SQL Database-hez csatlakozik, és hozzáfér az A munkamenet által létrehozott ##test táblához
SELECT *
FROM ##test;
Itt van az eredményhalmaz.
1, 1
A C munkamenet egy másik adatbázishoz csatlakozik az Azure SQL Database testdb2-ben, és hozzá szeretne férni a testdb1-ben létrehozott ##test. Ez a kijelölés a globális ideiglenes táblák adatbázis-hatóköre miatt meghiúsul
SELECT *
FROM ##test;
Ez a következő hibát generálja:
Msg 208, Level 16, State 0, Line 1
Invalid object name '##test'
Rendszerobjektumok kezelése az Azure SQL Database-ben tempdb
az aktuális felhasználói adatbázisból, teszteltb1
SELECT *
FROM tempdb.sys.objects;
SELECT *
FROM tempdb.sys.columns;
SELECT *
FROM tempdb.sys.database_files;
X. Adatmegőrzési szabályzat engedélyezése egy táblán
Az alábbi példa egy táblát hoz létre, amelyen engedélyezve van az adatmegőrzés és egy hét megőrzési időszak. Ez a példa csak Azure SQL Edge- vonatkozik.
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. Frissíthető főkönyvtábla létrehozása
Az alábbi példa létrehoz egy frissíthető főkönyvtáblát, amely nem egy időleges tábla névtelen előzménytáblával (a rendszer létrehozza az előzménytábla nevét) és a létrehozott főkönyvnézet nevét. Mivel a szükséges generált mindig oszlopok neve és a főkönyv nézetben szereplő további oszlopok nincsenek megadva, az oszlopok alapértelmezett nevei lesznek.
CREATE SCHEMA [HR];
GO
CREATE TABLE [HR].[Employees]
(
EmployeeID INT NOT NULL,
Salary MONEY NOT NULL
)
WITH (SYSTEM_VERSIONING = ON, LEDGER = ON);
GO
Az alábbi példa létrehoz egy olyan táblát, amely egyszerre egy temporális tábla és egy frissíthető főkönyvtábla, egy névtelen előzménytáblával (a rendszer által létrehozott névvel), a létrehozott főkönyvnézet nevével és a generált mindig oszlopok alapértelmezett neveivel, valamint a további főkönyvnézet oszlopaival.
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
Az alábbi példa létrehoz egy olyan táblát, amely egyszerre egy időbeli tábla és egy frissíthető főkönyvtábla, a kifejezetten elnevezett előzménytáblával, a főkönyvnézet felhasználó által megadott nevével, valamint a létrehozott mindig oszlopok és további oszlopok felhasználó által megadott neveivel a főkönyv nézetben.
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
Az alábbi példa egy csak hozzáfűző naplótáblát hoz létre a főkönyvnézet generált nevével és a főkönyv nézetben lévő oszlopokkal.
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
Az alábbi példa létrehoz egy főkönyv-adatbázist az Azure SQL Database-ben és egy frissíthető főkönyvtáblát az alapértelmezett beállítások használatával. Egy frissíthető főkönyvtábla létrehozása egy főkönyvadatbázisban nem igényel WITH (SYSTEM_VERSIONING = ON, LEDGER = ON);
használatát.
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