Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Azure SQL Database
Felügyelt Azure SQL-példány
SQL-adatbázis a Microsoft Fabricben
Létrehoz egy új táblát az adatbázisban.
Note
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
Szintaxisopciók
Közös 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
[ , HISTORY_RETENTION_PERIOD = <history_retention_period> ]
[ , 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 } ] ) ]
}
Arguments
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: SQL Server 2012 (11.x) és újabb verziókra vonatkozik.
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 MINT 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 + bindexelhető, 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.
Note
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 ISNULL konstanssal 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.
PERSISTED
Megadja, hogy az SQL Server adatbázis motor fizikailag tárolja a kiszámított értékeket a táblázatban, és frissítse az értékeket, amikor bármely más oszlop, amelyhez a kiszámított oszlop támaszkodik, frissül. 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. A számított oszlopok indexeiről további információkért lásd a éshivatkozást. 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 meg van jelölve, vagy a korlátozás egyébként klaszteres indexet hoz létre, és egy olyan partition_scheme van megadva, amely eltér a tábladefiníció partition_scheme-jától vagy fájlcsoportjától, vagy fordítva, akkor csak a korlátozás definícióját tartják be, a másikat pedig figyelmen kívül hagyják.
Note
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 AUTObeá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ó.
Note
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 be a rekordba, egy mutatót sorban tárolnak, a többi pedig a soron kívül a LOB tárolóhelyen. 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árolóhely" helyét változtatja, ez nem befolyásolja, mikor tárolják az adatokat sorban. 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" }
Érvényes: SQL Server 2008 R2 (10.50.x) és újabb verziók. Azure SQL Database és Azure SQL Managed Instance nem támogat 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 keletkezik.
Az ON és a TEXTIMAGE_ONfüggvényhez hasonlóan a CREATE TABLEFILESTREAM_ON 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.
Kapcsolódó FILESTREAM cikkekért lásd: Binary Large Object (Blob) Data.
[ 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 TYPEutasí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 TABLEutasítás során. A hossz specifikációja azonban nem módosítható; az alias adattípusának hossza nem határozható megCREATE TABLEutasításban. - Felhasználó által definiált CLR-típus. A clr felhasználó által definiált típusok a
CREATE TYPEutasí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
dbosémája.
A memóriaoptimalizált táblák esetén lásd: Támogatott adattípusok In-Memory OLTP-hez a támogatott rendszertípusok listájáért.
precision
A megadott adattípus pontossága. Az érvényes pontossági értékekkel kapcsolatos további információkért lásd: Pontosság, skálázás és hossz.
scale
A megadott adattípus méretezése. Az érvényes skálázási értékekkel kapcsolatos további információkért lásd a pontosságot, a méretezést és a hosszt.
max
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.
CONTENT
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.
DOCUMENT
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.
DEFAULT
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.
IDENTITY
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).
seed
A táblába betöltött első sorhoz használt érték.
increment
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 ]
Érvényes: SQL Server 2016 (13.x) és újabb verziók, Azure SQL Database és Azure SQL Managed Instance.
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.
| Parameter | Kötelező adattípus | Szükséges nullabitás | Description |
|---|---|---|---|
| ROW | datetime2 | ELKEZD: NOT NULLVÉ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 | ELKEZD: NOT NULLVÉGE: NULL |
Vonatkozik a következőkre: SQL Server 2022 (16.x) és újabb verziók, valamint 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 | ELKEZD: NOT NULLVÉGE: NULL |
Vonatkozik a következőkre: SQL Server 2022 (16.x) és újabb verziók, valamint 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 megpróbálsz olyan oszlopot megadni, amely nem felel meg ezeknek az adattípusnak vagy nullabilitási követelményeknek, a rendszer hibát ad. Ha nem határozod meg kifejezetten a nullabilitást, a rendszer a megadott követelmények szerint NOT NULL vagy annak megfelelően határozza meg az oszlopotNULL.
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őkre vonatkozik: AZ SQL Server 2014 (12.x) és újabb verziói, valamint az 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őkre vonatkozik: AZ SQL Server 2014 (12.x) és újabb verziói, valamint az 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, az Azure SQL Managed InstanceAUTD-ben és az Azure Synapse Analyticsben 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. Ezt nem klaszterelt oszloptároló indexnek hívják, mert az oszlopok korlátozottak, és másodlagos indexként létezik egy táblán.
Az adatok sorrendjét az Azure SQL Database-ben és az Azure SQL Managed InstanceAUTD-ben megadhatja egy nemclustered oszlopcentrikus indexben. További információ: A teljesítmény finomhangolása rendezett oszlopcentrikus indexekkel.
ON partition_scheme_name ( column_name )
Megadja azt a partíciós sémát, amely meghatározza azokat a fájlcsoportokat, amelyekre a partíciós index partíciói leképezik. 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 a particionált index particionálásra kerül. 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.
Note
Amikor nem egyedi, klaszterezett indexet osztaszkodsz be, az Database Engine alapértelmezés szerint hozzáadja a particionáló oszlopot a klaszterezett indexkulcsok listájához, ha az már nincs megadva. Amikor nem egyedi, nem klaszterezett indexet osztanak fel, az Database Engine a partíciós oszlopot nem kulcsként (benne foglalva) adja hozzá az indexben, ha az már 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.
Note
Nem lehet XML indexen partíciós sémát megadni. 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.
További információ az indexek, particionált táblák és indexek particionálásáról.
A 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.
Note
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" } ]
Érvényes: SQL Server 2008 R2 (10.50.x) és újabb verziók.
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 $ROWGUIDhaszná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ÍTVA
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 Encrypted (biztonságos enklávék nélkül) használsz, használj determinisztikus titkosítást azoknál az oszlopoknál, amelyeket paraméterekkel vagy csoportosító paraméterekkel keresünk, például egy kormányzati azonosító számon. 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 Always Encrypted rendszert használsz biztonságos enklávékon, a randomizált titkosítás ajánlott típus.
Az oszlopoknak megfelelő adattípusúnak kell lenniük.
ALGORITHM
A következőkre vonatkozik: SQL Server 2016 (13.x) és újabb verziók.
'AEAD_AES_256_CBC_HMAC_SHA_256'kell lennie.További információ a funkciókorlátozásokról: Always Encrypted.
SPARSE
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ért és a ritka oszlopokkal kapcsolatos további információkért lásd: Ritka oszlopok használata.
MASZKOLT ( FÜGGVÉNY = 'mask_function' )
A következőkre vonatkozik: SQL Server 2016 (13.x) és újabb verziók.
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éterekről a Dinamikus adatmaszkolás című témakörben olvashat.
FILESTREAM
Érvényes: SQL Server 2008 R2 (10.50.x) és újabb verziók.
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 eltávolítani, és a kapcsolódó korlátozásokat sem lehet megváltoztatni, amíg a táblához van egy FILESTREAM oszlop. 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.
További információért a Windows és SQL kollektációs nevekről lásd: Windows összesítési név és SQL Server kollektációs név.
További információ: COLLATE.
CONSTRAINT
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 | NEM 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.
UNIQUE
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 TABLEutasí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 AKCIÓ
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.
CASCADE
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 BEÁLLÍTÁS
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.
ÁLLÍTSD BE AZ ALAPÉRTELMEZETT BEÁLLÍTÁST
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 nullable, és nincs explicit alapértelmezett értékkészlet, akkor a NULL válik az oszlop implicit alapértelmezett értékévé.
Ne határozd meg
CASCADE, hogy a táblázatot egy logikai rekordokat használó merge kiadványba is beilleszted-e. További információ a logikai rekordokról: Kapcsolódó sorok módosításainak csoportosítása logikai rekordokkal.ON DELETE CASCADEnem határozható meg, ha már létezikINSTEAD OFeseményindítóON DELETEa táblában.Az
AdventureWorks2025adatbázisban például aProductVendortábla hivatkozási kapcsolatban áll aVendortáblával. AProductVendor.BusinessEntityIDidegen kulcs azVendor.BusinessEntityIDelsődleges kulcsra hivatkozik.Ha egy
DELETEutasítást hajt végre aVendortábla egyik sorában, ésON DELETE CASCADEművelet van megadvaProductVendor.BusinessEntityIDesetében, az adatbázismotor egy vagy több függő sort keres aProductVendortáblában. Ha van ilyen, aProductVendortábla függő sorai törlődnek, valamint aVendortáblában hivatkozott sor is.Ezzel szemben, ha
NO ACTIONmeg van jelölve, az Database Engine hibát generál, és visszafordítja a törlési műveletet aVendorsoron, ha legalább egy sor van aProductVendortáblázatban, amely 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 AKCIÓ
Az adatbázismotor hibát jelez, és a szülőtábla sorának frissítési művelete vissza lesz állítva.
CASCADE
A megfelelő sorok frissülnek a hivatkozó táblában, amikor az adott sor frissül a szülőtáblában.
NULL BEÁLLÍTÁS
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.
ÁLLÍTSD BE AZ ALAPÉRTELMEZETT BEÁLLÍTÁST
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 nullable, és nincs explicit alapértelmezett értékkészlet, akkor a NULL válik az oszlop implicit alapértelmezett értékévé.
Ne határozd meg
CASCADE, hogy a táblázatot egy logikai rekordokat használó merge kiadványba is beilleszted-e. További információ a logikai rekordokról: Kapcsolódó sorok módosításainak csoportosítása logikai rekordokkal.ON UPDATE CASCADE,SET NULLvagySET DEFAULTnem határozható meg, ha egyINSTEAD OFeseményindítóON UPDATEmár létezik a módosított táblában.Az
AdventureWorks2025adatbázisban például aProductVendortábla hivatkozási kapcsolatban áll aVendortáblával:ProductVendor.BusinessEntityidegen kulcs azVendor.BusinessEntityIDelsődleges kulcsra hivatkozik.Ha egy UPDATE utasítást hajt végre a
Vendortábla egyik sorában, és aProductVendor.BusinessEntityIDegy ON UPDATE CASCADE műveletet ad meg, az adatbázismotor egy vagy több függő sort keres aProductVendortáblában. Ha létezik ilyen, aProductVendortábla függő sorai frissülnek, valamint aVendortáblában hivatkozott sor is.Ezzel szemben, ha NINCS MŰVELET, az adatbázis motor hibát generál, és visszafordítja a frissítési műveletet a
Vendorsorban, ha legalább egy sor utalProductVendorrá.CHECK
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 | LEÍRÁS ]
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
A partíciós séma neve, amely meghatározza azokat a fájlcsoportokat, amelyekre a partíciós táblák partíciói vannak leképezve. A partíciósémának léteznie kell az adatbázisban.
[ partition_column_name. ]
Megadja azt az oszlopot, amelyhez egy partíciós tábla kerül partícióra. 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.
Important
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 biztosítjuk, hogy a particionáló oszlopok CHECK korlátai ne kelljenek null értékeket ellenőrizni.
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.
Important
A FILLFACTOR = fillfactor dokumentálás ELSŐDLEGES KULCS vagy EGYEDI korlátozásokra vonatkozó indexopcióként fenntartva a visszafelé kompatibilitás érdekében, de a jövőbeli kiadásokban nem dokumentálják így.
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. Az oszlopkészletekről további információt az Oszlopkészletek használata című témakörben talál.
SYSTEM_TIME IDŐSZAKA ( system_start_time_column_name , system_end_time_column_name )
A következőkre vonatkozik: AZ SQL Server 2016 (13.x) és újabb verziói, valamint az Azure SQL Database.
Megadja azoknak az oszlopoknak a nevét, amelyeket a rendszer használ a rekord érvényes időszakának rögzítésére. 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őkre vonatkozik: AZ SQL Server 2016 (13.x) és újabb verziói, valamint az Azure SQL Database.
Memóriára optimalizált esetekben a késleltetés megadja, hogy egy sornak milyen minimális perc kell változatlanul maradnia a táblázatban, mielőtt jogosult lenne a columnstore indexbe való tömörítésre. 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.
Ajánlásokért a COMPRESSION_DELAYhasználatra vonatkozóan lásd: Kezdj el columnstore indexekkel valós idejű működési elemzéshez
< > 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:
NONE
A tábla vagy a megadott partíciók nincsenek tömörítve.
ROW
A táblázat vagy a megadott partíciók sortömörítéssel vannak tömörítve.
PAGE
A táblázat vagy a megadott partíciók laptömörítéssel vannak tömörítve.
COLUMNSTORE
A következőkre vonatkozik: AZ SQL Server 2016 (13.x) és újabb verziói, valamint az 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őkre vonatkozik: AZ SQL Server 2016 (13.x) és újabb verziói, valamint az Azure SQL Database.
Csak oszlopcentrikus indexekre vonatkozik, beleértve a nemclustered columnstore és a fürtözött oszlopcentrikus indexeket is. COLUMNSTORE_ARCHIVE tovább tömöríti a táblát vagy partíciót kisebb méretre. 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és.
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:
ON
A xml adattípust használó oszlopok tömörítve vannak.
OFF
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 okoz. Ha a ON PARTITIONS záradék nincs megadva, az DATA_COMPRESSION opció minden partícióra vonatkozik egy partíciós tábla.
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.
ON
Figyelmeztető üzenet jelenik meg, ha ismétlődő kulcsértékeket szúr be egy egyedi indexbe. Csak az egyediség-korlátozást megsértő sorok meghiúsulnak.
OFF
Hibaüzenet jelenik meg, ha ismétlődő kulcsértékeket szúr be egy egyedi indexbe. Az egész INSERT műveletet visszafordítják.
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_KEYmegtekinté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 }
Érvényes: SQL Server 2019 (15.x) és újabb verziók, Azure SQL Database és Azure SQL Managed Instance.
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: SQL Server 2012 (11.x) és újabb verziókra vonatkozik.
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: SQL Server 2012 (11.x) és újabb verziókra vonatkozik. Azure SQL Database és Azure SQL Managed Instance nem támogat 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: SQL Server 2012 (11.x) és újabb verziókra vonatkozik. Azure SQL Database és Azure SQL Managed Instance nem támogat 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: SQL Server 2012 (11.x) és újabb verziókra vonatkozik. Azure SQL Database és Azure SQL Managed Instance nem támogat 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: SQL Server 2012 (11.x) és újabb verziókra vonatkozik. Azure SQL Database és Azure SQL Managed Instance nem támogat 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 [ , HISTORY_RETENTION_PERIOD = history_retention_period ] [ , DATA_CONSISTENCY_CHECK = { ON | OFF } ] ) ] ]
Érvényes: SQL Server 2016 (13.x) és újabb verziók, Azure SQL Database és Azure SQL Managed Instance.
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 egy külön előzménytáblában rögzíti az egyes rekordok előzményeit a rendszer által verziózott táblában. Ha nem használja az HISTORY_TABLE argumentumot, az előzménytábla neve .MSSQL_TemporalHistoryFor<primary_table_object_id> 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.
További információért HISTORY_RETENTION_PERIODlásd: A Történelmi adatok kezelése az Időbeli táblázatokban megtartási politikával.
További információért DATA_CONSISTENCY_CHECKlásd: Időbeli táblarendszer konzisztencia ellenőrzések.
REMOTE_DATA_ARCHIVE = { ON [ ( table_stretch_options [ ,... n ] ) ] ] | KI ( MIGRATION_STATE = SZÜNETELTETVE ) }
A következőkre vonatkozik: SQL Server 2016 (13.x) és újabb verziók.
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.
Important
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 ONmegadá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.
Prerequisites. 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-.
Permissions. 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 } ]
A következőkre vonatkozik: SQL Server 2016 (13.x) és újabb verziók.
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.
Important
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 }
Érvényes: SQL Server 2016 (13.x) és újabb verziók, Azure SQL Database és Azure SQL Managed Instance.
Adja meg
OUTBOUNDaz 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.
- date
- 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 verziók, 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 kezdéséhez lásd az Első területek felmérését In-Memory OLTP-ben. A memóriaoptimalizált táblákról részletesebb információkért lásd: Sample database for in-memory OLTP.
Az alapértelmezett KI érték azt jelzi, hogy a tábla lemezalapú.
DURABILITY
A következővonatkozik: SQL Server 2014 (12.x) és újabb verziók, 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 = ONengedélyezett.
Warning
Ha egy táblát létrehoznak , DURABILITY = SCHEMA_ONLYés READ_COMMITTED_SNAPSHOT később módosítják ALTER DATABASE, az adat elveszik.
BUCKET_COUNT
A következővonatkozik: SQL Server 2014 (12.x) és újabb verziók, 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. A gyűjtők számáról további információt Memory-Optimized táblák indexei című témakörben talál.
Bucket_count kötelező argumentum.
INDEX
A következővonatkozik: SQL Server 2014 (12.x) és újabb verziók, 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
HASH
A következővonatkozik: SQL Server 2014 (12.x) és újabb verziók, 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.
Note
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 = ONvan 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é. Táblázat létrehozásának kísérletei LEDGER = OFF hibat okoznak. Minden új tábla alapértelmezés szerint frissíthető főkönyvtábláként jön létre, még ha nem is megadod LEDGER = ON, és minden más paraméterre alapértékekkel van létrehozva.
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 STARTGENERATED ALWAYS AS TRANSACTION_ID ENDGENERATED ALWAYS AS SEQUENCE_NUMBER STARTGENERATED 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 STARTGENERATED ALWAYS AS SEQUENCE_NUMBER START
Ha a szükséges generált minnes oszlopok közül bármelyik nincs definiálva az CREATE TABLE állításban, és az állítás tartalmazza LEDGER = ON, a rendszer automatikusan megpróbálja hozzáadni az oszlopot az alábbi listából található megfelelő oszlopdefinícióval együtt. Ha névütközés van egy már definiált oszloppal, a rendszer hibát okoz.
[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 létezik egy nézet a megadott vagy generált nevekkel, a rendszer hibát mutat. 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 név | Adattípus | Description |
|---|---|---|
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 DELETEtartalmaz. 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önyv nézet minden opciója megadja egy oszlop nevét, amelyet a rendszer hozzáad a nézethez, valamint a főkönyv táblázatban meghatározott 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.
Remarks
Az engedélyezett táblák, oszlopok, korlátok és indexek számáról információért lásd: Az SQL Server maximális kapacitás specifikációi.
A tér általában táblák és indexek számára van lefoglalva, egyenként egy léptékben. Amikor a SET MIXED_PAGE_ALLOCATION választás ALTER DATABASE TRUE-ra van állítva, vagy mindig az SQL Server 2016 (13.x) előtt, amikor egy táblázatot vagy indexet létrehoznak, vegyes terjedelemű oldalakat osztanak le, amíg nem lesz elég oldal az egységes kiterjedéshez. 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.
Az SQL adatbázisban a Microsoft Fabric-ben néhány táblafunkció létrehozható, de nem tükrözve a Fabric OneLake-be. További információért lásd: Korlátozások a Fabric SQL adatbázis tükrözésére.
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 utasításban megadott CREATE TABLE é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 schema_name hozzáadsz, amikor ideiglenes táblát hozol létre vagy használsz, azt figyelmen kívül hagyják. 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 sys.objectstempdb 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_DROPadatbá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_DROPadatbázis-hatókörű konfiguráció ki , akkor a rendszer csak aDROP TABLEhaszná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 hoznod egy partíciós sémát, amely megadja a fájlcsoportokat, amelyek a partition függvény által jelölt partíciókat tárolják. 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.
Note
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 felhasználó által definiált típusok.
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 felhasználó által definiált típusok.
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 felhasználó által definiált típusok.
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_TIMESTAMPAktuális dátum és idő. CURRENT_USERA beszúrást végrehajtó felhasználó neve. SESSION_USERA beszúrást végrehajtó felhasználó neve. SYSTEM_USERA beszúrást végrehajtó felhasználó neve. USERA 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 TABLEhasználatával kell elvetni. A kényszerhez létrehozott és használt indexekALTER INDEX ... REBUILDhasználatával újraépíthetők. További információ: Indexkarbantartás optimalizálása a lekérdezési teljesítmény javítása és az erőforrás-felhasználás csökkenté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,UPDATEvagyDELETEutasításban megsért egy korlátozást, az utasítás véget ér. Ha azonban aSET XACT_ABORTKI é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_ABORTBE értékre van állítva, a teljes tranzakció vissza lesz állítva. AROLLBACK TRANSACTIONutasítást a tranzakciódefinícióval is használhatja a@@ERRORrendszerfü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.
Nullabilitási szabályok egy táblázat definíción belül
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 | Rule |
|---|---|
| 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-alapú felhasználói 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 SEThaszná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 DATABASEhaszná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_DEFAULTadatbá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.
Note
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 okoz. 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 hogyan hat egy táblára, indexre vagy partícióra, használja a sp_estimate_data_compression_savings tárolt eljárást.
Permissions
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 az állítás bármely oszlopa CREATE TABLE CLR felhasználó által definiált típusúnak van meghatározva, akkor a típus tulajdonjoga vagy REFERENCES engedélye szükséges.
Ha az állítás bármely oszlopához CREATE TABLE XML sémagyűjtemény tartozik, akkor az XML sémagyűjtemény tulajdonjoga vagy REFERENCES engedélye szükséges.
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.
Examples
A. 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 EmployeeID tábla Employee 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 AdventureWorks2025 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 Name tábla Product 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 AdventureWorks2025 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 CreditRating tábla Vendor 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 PurchaseOrderDetail adatbázisban létrehozott AdventureWorks2025 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 dbolesz.
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 HRResumeSchemaCollectionvan begépelve. A DOCUMENT kulcsszó azt határozza meg, hogy a xml 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 col1oszlop PartitionTable értékei alapján a partíciók a következő módokon vannak hozzárendelve.
| Filegroup | test1fg | test2fg | test3fg | test4fg |
|---|---|---|---|---|
| Partition | 1 | 2 | 3 | 4 |
| Values | col 1 <= 1 |
col1 > 1 AND col1 <= 100 |
col1 > 100 AND col1 <= 1,000 |
col1 > 1000 |
I. 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 NEWSEQUENTIALID() kényszer DEFAULT 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ú utf8stringdefiniá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 utf8stringalapján van definiálva, és ToString() metódus utf8string 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 USER_NAME() oszlop myuser_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 Phototartalmazó 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és.
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: Használj ritka oszlopokat és Használj oszlophalmazokat.
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 CSetnevű 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őkre vonatkozik: AZ SQL Server 2016 (13.x) és újabb verziói, valamint az 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: Időbeli táblázatok.
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őkre vonatkozik: AZ SQL Server 2016 (13.x) és újabb verziói, valamint az 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 kifejezetten megnevezed a korlátozást, a második ülés olyan hibát generál, mint 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
A következő példa egy frissíthető főkönyvtáblát hoz létre, amely nem időbeli tábla, egy névtelen történettáblával (a rendszer generálja a történettábla nevét) és a generált főkönyv nézet nevét. Mivel a szükséges generált mindig generált oszlopok és a könyvelő nézetben lévő további oszlopok neve nincsenek megadva, az oszlopok alapértelmezett nevei vannak.
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
Kapcsolódó tartalom
- ALTERNATÍV TÁBLÁZAT (Transact-SQL)
- COLUMNPROPERTY (Transact-SQL)
- INDEX KÉSZÍTÉSE (Transact-SQL)
- NÉZET LÉTREHOZÁSA (Transact-SQL)
- Adattípusok (Transact-SQL)
- DROP INDEX (Transact-SQL)
- sys.dm_sql_referenced_entities
- sys.dm_sql_referencing_entities
- DROP TABLE (Transact-SQL)
- CREATE PARTITION FÜGGVÉNY (Transact-SQL)
- CREATE PARTITION SCHEME (Transact-SQL)
- TÍPUS LÉTREHOZÁSA (Transact-SQL)
- ESEMÉNYADATOK (Transact-SQL)
- sp_help
- sp_helpconstraint
- sp_rename
- sp_spaceused