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
Azure Synapse Analytics
Elemzési platformrendszer (PDW)
Raktár a Microsoft Fabricben
SQL-adatbázis a Microsoft Fabricben
Módosítja a tábladefiníciót oszlopok és korlátozások módosításával, hozzáadásával vagy elvetésével.
ALTER TABLE A partíciók hozzárendelését és újraépítését is lehetővé teszi, illetve letiltja és engedélyezi a korlátozásokat és az eseményindítókat.
Note
A Fabric Warehouse ALTER TABLE jelenleg csak a korlátozások és a null értékű oszlopok hozzáadása esetén támogatott. Lásd: Warehouse szintaxisa a Microsoft Fabric.
Jelenleg a memóriaoptimalizált táblák nem elérhetők SQL adatbázisban a Microsoft Fabricben.
A szintaxis ALTER TABLE a lemezalapú és a memóriaoptimalizált táblák esetében eltérő. Az alábbi hivatkozások segítségével közvetlenül a táblázattípusok megfelelő szintaxisblokkjához és a megfelelő szintaxisbeli példákhoz érheti el:
Lemezalapú táblák:
Memóriaoptimalizált táblák:
A szintaxisi konvenciókról további információt Transact-SQL szintaxiskonvenciákat.
Szintaxis lemezalapú táblákhoz
ALTER TABLE { database_name.schema_name.table_name | schema_name.table_name | table_name }
{
ALTER COLUMN column_name
{
[ type_schema_name. ] type_name
[ (
{
precision [ , scale ]
| max
| xml_schema_collection
}
) ]
[ COLLATE collation_name ]
[ NULL | NOT NULL ] [ SPARSE ]
| { ADD | DROP }
{ ROWGUIDCOL | PERSISTED | NOT FOR REPLICATION | SPARSE | HIDDEN }
| { ADD | DROP } MASKED [ WITH ( FUNCTION = ' mask_function ') ]
}
[ WITH ( ONLINE = ON | OFF ) ]
| [ WITH { CHECK | NOCHECK } ]
| ADD
{
<column_definition>
| <computed_column_definition>
| <table_constraint>
| <column_set_definition>
} [ ,...n ]
| [ system_start_time_column_name datetime2 GENERATED ALWAYS AS ROW START
[ HIDDEN ] [ NOT NULL ] [ CONSTRAINT constraint_name ]
DEFAULT constant_expression [WITH VALUES] ,
system_end_time_column_name datetime2 GENERATED ALWAYS AS ROW END
[ HIDDEN ] [ NOT NULL ][ CONSTRAINT constraint_name ]
DEFAULT constant_expression [WITH VALUES] ,
start_transaction_id_column_name bigint GENERATED ALWAYS AS TRANSACTION_ID START
[ HIDDEN ] NOT NULL [ CONSTRAINT constraint_name ]
DEFAULT constant_expression [WITH VALUES],
end_transaction_id_column_name bigint GENERATED ALWAYS AS TRANSACTION_ID END
[ HIDDEN ] NULL [ CONSTRAINT constraint_name ]
DEFAULT constant_expression [WITH VALUES],
start_sequence_number_column_name bigint GENERATED ALWAYS AS SEQUENCE_NUMBER START
[ HIDDEN ] NOT NULL [ CONSTRAINT constraint_name ]
DEFAULT constant_expression [WITH VALUES],
end_sequence_number_column_name bigint GENERATED ALWAYS AS SEQUENCE_NUMBER END
[ HIDDEN ] NULL [ CONSTRAINT constraint_name ]
DEFAULT constant_expression [WITH VALUES]
]
PERIOD FOR SYSTEM_TIME ( system_start_time_column_name, system_end_time_column_name )
| DROP
[ {
[ CONSTRAINT ][ IF EXISTS ]
{
constraint_name
[ WITH
( <drop_clustered_constraint_option> [ ,...n ] )
]
} [ ,...n ]
| COLUMN [ IF EXISTS ]
{
column_name
} [ ,...n ]
| PERIOD FOR SYSTEM_TIME
} [ ,...n ] ]
| [ WITH { CHECK | NOCHECK } ] { CHECK | NOCHECK } CONSTRAINT
{ ALL | constraint_name [ ,...n ] }
| { ENABLE | DISABLE } TRIGGER
{ ALL | trigger_name [ ,...n ] }
| { ENABLE | DISABLE } CHANGE_TRACKING
[ WITH ( TRACK_COLUMNS_UPDATED = { ON | OFF } ) ]
| SWITCH [ PARTITION source_partition_number_expression ]
TO target_table
[ PARTITION target_partition_number_expression ]
[ WITH ( <low_priority_lock_wait> ) ]
| SET
(
[ FILESTREAM_ON =
{ partition_scheme_name | filegroup | "default" | "NULL" } ]
| SYSTEM_VERSIONING =
{
OFF
| ON
[ ( HISTORY_TABLE = schema_name . history_table_name
[, DATA_CONSISTENCY_CHECK = { ON | OFF } ]
[, HISTORY_RETENTION_PERIOD =
{
INFINITE | number {DAY | DAYS | WEEK | WEEKS
| MONTH | MONTHS | YEAR | YEARS }
}
]
)
]
}
| DATA_DELETION =
{
OFF
| ON
[( [ FILTER_COLUMN = column_name ]
[, RETENTION_PERIOD = { INFINITE | number { DAY | DAYS | WEEK | WEEKS
| MONTH | MONTHS | YEAR | YEARS } } ]
)]
} )
| REBUILD
[ [PARTITION = ALL]
[ WITH ( <rebuild_option> [ ,...n ] ) ]
| [ PARTITION = partition_number
[ WITH ( <single_partition_rebuild_option> [ ,...n ] ) ]
]
]
| <table_option>
| <filetable_option>
| <stretch_configuration>
}
[ ; ]
-- ALTER TABLE options
<column_set_definition> ::=
column_set_name XML COLUMN_SET FOR ALL_SPARSE_COLUMNS
<drop_clustered_constraint_option> ::=
{
MAXDOP = max_degree_of_parallelism
| ONLINE = { ON | OFF }
| MOVE TO
{ partition_scheme_name ( column_name ) | filegroup | "default" }
}
<table_option> ::=
{
SET ( LOCK_ESCALATION = { AUTO | TABLE | DISABLE } )
}
<filetable_option> ::=
{
[ { ENABLE | DISABLE } FILETABLE_NAMESPACE ]
[ SET ( FILETABLE_DIRECTORY = directory_name ) ]
}
<stretch_configuration> ::=
{
SET (
REMOTE_DATA_ARCHIVE
{
= ON (<table_stretch_options>)
| = OFF_WITHOUT_DATA_RECOVERY ( MIGRATION_STATE = PAUSED )
| ( <table_stretch_options> [, ...n] )
}
)
}
<table_stretch_options> ::=
{
[ FILTER_PREDICATE = { null | table_predicate_function } , ]
MIGRATION_STATE = { OUTBOUND | INBOUND | PAUSED }
}
<single_partition_rebuild__option> ::=
{
SORT_IN_TEMPDB = { ON | OFF }
| MAXDOP = max_degree_of_parallelism
| DATA_COMPRESSION = { NONE | ROW | PAGE | COLUMNSTORE | COLUMNSTORE_ARCHIVE}
| ONLINE = { ON [( <low_priority_lock_wait> ) ] | OFF }
}
<low_priority_lock_wait>::=
{
WAIT_AT_LOW_PRIORITY ( MAX_DURATION = <time> [ MINUTES ],
ABORT_AFTER_WAIT = { NONE | SELF | BLOCKERS } )
}
További információ:
- TÁBLÁZAT column_constraint
- TÁBLÁZAT column_definition MÓDOSÍTÁSA
- TÁBLÁZAT computed_column_definition
- ALTER TABLE index_option
- ALTER TABLE táblázat_korlátozás
Memóriaoptimalizált táblák szintaxisa
ALTER TABLE { database_name.schema_name.table_name | schema_name.table_name | table_name }
{
ALTER COLUMN column_name
{
[ type_schema_name. ] type_name
[ (
{
precision [ , scale ]
}
) ]
[ COLLATE collation_name ]
[ NULL | NOT NULL ]
}
| ALTER INDEX index_name
{
[ type_schema_name. ] type_name
REBUILD
[ [ NONCLUSTERED ] WITH ( BUCKET_COUNT = bucket_count )
]
}
| ADD
{
<column_definition>
| <computed_column_definition>
| <table_constraint>
| <table_index>
| <column_index>
} [ ,...n ]
| DROP
[ {
CONSTRAINT [ IF EXISTS ]
{
constraint_name
} [ ,...n ]
| INDEX [ IF EXISTS ]
{
index_name
} [ ,...n ]
| COLUMN [ IF EXISTS ]
{
column_name
} [ ,...n ]
| PERIOD FOR SYSTEM_TIME
} [ ,...n ] ]
| [ WITH { CHECK | NOCHECK } ] { CHECK | NOCHECK } CONSTRAINT
{ ALL | constraint_name [ ,...n ] }
| { ENABLE | DISABLE } TRIGGER
{ ALL | trigger_name [ ,...n ] }
| SWITCH [ [ PARTITION ] source_partition_number_expression ]
TO target_table
[ PARTITION target_partition_number_expression ]
[ WITH ( <low_priority_lock_wait> ) ]
}
[ ; ]
-- ALTER TABLE options
< table_constraint > ::=
[ CONSTRAINT constraint_name ]
{
{PRIMARY KEY | UNIQUE }
{
NONCLUSTERED (column [ ASC | DESC ] [ ,... n ])
| NONCLUSTERED HASH (column [ ,... n ] ) WITH ( BUCKET_COUNT = bucket_count )
}
| FOREIGN KEY
( column [ ,...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 [ ,... n ] ) WITH (BUCKET_COUNT = bucket_count)
| [ NONCLUSTERED ] (column [ ASC | DESC ] [ ,... n ] )
[ ON filegroup_name | default ]
| CLUSTERED COLUMNSTORE [ WITH ( COMPRESSION_DELAY = { 0 | delay [MINUTES] } ) ]
[ ON filegroup_name | default ]
}
Az Azure Synapse Analytics és a párhuzamos adattárház szintaxisa
ALTER TABLE { database_name.schema_name.source_table_name | schema_name.source_table_name | source_table_name }
{
ALTER COLUMN column_name
{
type_name [ ( precision [ , scale ] ) ]
[ COLLATE Windows_collation_name ]
[ NULL | NOT NULL ]
}
| ADD { <column_definition> | <column_constraint> FOR column_name} [ ,...n ]
| DROP { COLUMN column_name | [CONSTRAINT] constraint_name } [ ,...n ]
| REBUILD {
[ PARTITION = ALL [ WITH ( <rebuild_option> ) ] ]
| [ PARTITION = partition_number [ WITH ( <single_partition_rebuild_option> ] ]
}
| { SPLIT | MERGE } RANGE (boundary_value)
| SWITCH [ PARTITION source_partition_number
TO target_table_name [ PARTITION target_partition_number ] [ WITH ( TRUNCATE_TARGET = ON | OFF ) ] ]
}
[ ; ]
<column_definition>::=
{
column_name
type_name [ ( precision [ , scale ] ) ]
[ <column_constraint> ]
[ COLLATE Windows_collation_name ]
[ NULL | NOT NULL ]
}
<column_constraint>::=
[ CONSTRAINT constraint_name ]
{
DEFAULT constant_expression
| PRIMARY KEY NONCLUSTERED (column_name [ ,... n ]) NOT ENFORCED -- Applies to Azure Synapse Analytics only
| UNIQUE (column_name [ ,... n ]) NOT ENFORCED -- Applies to Azure Synapse Analytics only
}
<rebuild_option > ::=
{
DATA_COMPRESSION = { COLUMNSTORE | COLUMNSTORE_ARCHIVE }
[ ON PARTITIONS ( {<partition_number> [ TO <partition_number>] } [ , ...n ] ) ]
| XML_COMPRESSION = { ON | OFF }
[ ON PARTITIONS ( {<partition_number> [ TO <partition_number>] } [ , ...n ] ) ]
}
<single_partition_rebuild_option > ::=
{
DATA_COMPRESSION = { COLUMNSTORE | COLUMNSTORE_ARCHIVE }
}
Note
Az Azure Synapse Analytics kiszolgáló nélküli SQL-készlete csak külső és ideiglenes táblákat támogat.
A Hálóban lévő Raktár szintaxisa
ALTER TABLE { database_name.schema_name.table_name | schema_name.table_name | table_name }
{
ADD { column_name <data_type> [COLLATE collation_name] [ <column_options> ] } [ ,...n ]
| ADD { <column_constraint> FOR column_name} [ ,...n ]
| DROP { COLUMN column_name | [CONSTRAINT] constraint_name } [ ,...n ]
}
[ ; ]
<column_options> ::=
[ NULL ] -- default is NULL
<data type> ::=
datetime2 ( n )
| date
| time ( n )
| float [ ( n ) ]
| real [ ( n ) ]
| decimal [ ( precision [ , scale ] ) ]
| numeric [ ( precision [ , scale ] ) ]
| bigint
| int
| smallint
| bit
| varchar [ ( n ) ]
| char [ ( n ) ]
| varbinary [ ( n ) ]
| uniqueidentifier
<column_constraint>::=
[ CONSTRAINT constraint_name ]
{
PRIMARY KEY NONCLUSTERED (column_name [ ,... n ]) NOT ENFORCED
| UNIQUE NONCLUSTERED (column_name [ ,... n ]) NOT ENFORCED
| FOREIGN KEY
( column [ ,...n ] )
REFERENCES referenced_table_name [ ( ref_column [ ,...n ] ) ] NOT ENFORCED
}
Arguments
database_name
Annak az adatbázisnak a neve, amelyben a tábla létre lett hozva.
schema_name
Annak a sémának a neve, amelyhez a tábla tartozik.
table_name
A módosítani kívánt tábla neve. Ha a tábla nem az aktuális adatbázisban található, vagy az aktuális felhasználó tulajdonában lévő séma tartalmazza, explicit módon meg kell adnia az adatbázist és a sémát.
OSZLOP MÓDOSÍTÁSA
Megadja, hogy a névvel ellátott oszlopot módosítani vagy módosítani kell.
A módosított oszlop nem lehet:
Egy időbélyeggel adattípussal rendelkező oszlop.
A
ROWGUIDCOLtáblázathoz tartozó.Számított vagy számított oszlopban használt oszlop.
Az utasítás által
CREATE STATISTICSgenerált statisztikákban használatos. A felhasználóknak futtatniukDROP STATISTICSkell a statisztikák elvetéséhez, mielőttALTER COLUMNsikeresek lehetnek. A lekérdezés futtatásával lekérheti a felhasználó által létrehozott statisztikákat és statisztikai oszlopokat egy táblához.SELECT s.name AS statistics_name, c.name AS column_name, sc.stats_column_id FROM sys.stats AS s INNER JOIN sys.stats_columns AS sc ON s.object_id = sc.object_id AND s.stats_id = sc.stats_id INNER JOIN sys.columns AS c ON sc.object_id = c.object_id AND c.column_id = sc.column_id WHERE s.object_id = OBJECT_ID('<table_name>');Note
A lekérdezésoptimalizáló által automatikusan létrehozott statisztikákat a rendszer automatikusan elveti
ALTER COLUMN.Egy vagy
PRIMARY KEYtöbb[FOREIGN KEY] REFERENCESkorlátozásban használatos.Egy vagy
CHECKtöbbUNIQUEkorlátozásban használatos. A változóhosszúságú oszlop hosszának módosítása azonban megengedett egyCHECKvagyUNIQUEtöbb kényszerben.Alapértelmezett definícióhoz van társítva. Az oszlop hossza, pontossága vagy mérete azonban módosítható, ha az adattípus nem változik.
A szöveges, és képoszlopok adattípusa csak a következő módokon módosítható:
- szövegvarchar(max), nvarchar(max)vagy xml
- ntextvarchar(max), nvarchar(max)vagy xml
- képvarbinary(max)
Egyes adattípus-módosítások az adatok változását okozhatják. Ha például egy nchar vagy nvarchar oszlopot karakteres vagy varcharmódosítja, a kiterjesztett karakterek konvertálását okozhatja. További információ: CAST és CONVERT. Az oszlopok pontosságának vagy méretének csökkentése adatcsokálást okozhat.
Note
A particionált tábla oszlopának adattípusa nem módosítható.
Az indexben szereplő oszlopok adattípusa csak akkor módosítható, ha az oszlop varchar, nvarcharvagy varbináris adattípus, és az új méret megegyezik vagy nagyobb a régi méretnél.
Az elsődleges kulcs korlátozásában szereplő oszlop nem módosítható a következőre NOT NULLNULL: .
Always Encrypted használata esetén (biztonságos enklávék nélkül), ha a módosított oszlop titkosítva ENCRYPTED WITHvan, az adattípust egy kompatibilis adattípusra (például INT erre BIGINT) módosíthatja, de a titkosítási beállításokat nem módosíthatja.
Az Always Encrypted biztonságos enklávékkal való használatakor bármilyen titkosítási beállítást megváltoztathat, ha az oszlopot védő oszloptitkosítási kulcs (és az új oszloptitkosítási kulcs, ha módosítja a kulcsot) támogatja az enklávészámítást (enklávé-kompatibilis oszlop főkulcsokkal titkosítva). További információ: Always Encrypted biztonságos enklávékkal.
Ha módosít egy oszlopot, az adatbázismotor nyomon követi az egyes módosításokat úgy, hogy hozzáad egy sort egy rendszertáblához, és az előző oszlopmódosítást elvetett oszlopként jelöli meg. Abban a ritka esetben, amikor túl sokszor módosít egy oszlopot, az adatbázismotor elérheti a rekordméret korlátját. Ha ez történik, az 511-et vagy az 1708-at kapja. A hibák elkerülése érdekében vagy rendszeresen újraépítse a táblán lévő fürtözött indexet, vagy csökkentse az oszlopmódosítások számát.
column_name
A módosítani, hozzáadni vagy elvetni kívánt oszlop neve. A column_name legfeljebb 128 karakter hosszúságú lehet. Új oszlopok esetén kihagyhatja column_nameidőbélyeggel adattípussal létrehozott oszlopok esetében. Az időbélyeg
Note
A rendszer új oszlopokat ad hozzá a tábla összes meglévő oszlopának módosítása után.
[ type_schema_name. ] type_name
A módosított oszlop új adattípusa vagy a hozzáadott oszlop adattípusa. A particionált táblák meglévő oszlopaihoz nem adható meg type_name. type_name a következő típusok bármelyike lehet:
- SQL Server-rendszer adattípusa.
- Alias adattípus sql serveres rendszer adattípuson alapul. A tábladefiníciókban való használatuk előtt aliasadattípusokat hozhat létre az
CREATE TYPEutasítással. - A .NET-keretrendszer felhasználó által definiált típusa és az a séma, amelyhez tartozik. A tábladefiníciókban való használatuk előtt létre kell hoznia a felhasználó által definiált típusokat az
CREATE TYPEutasítással.
A módosított oszlop type_name a következők:
- Az előző adattípusnak implicit módon konvertálhatónak kell lennie az új adattípusra.
- type_name nem lehet időbélyeg.
- ANSI_NULL alapértelmezett értékek mindig be vannak kapcsolva
ALTER COLUMN; ha nincs megadva, az oszlop null értékű. -
ANSI_PADDINGpadding mindigONaALTER COLUMN. - Ha a módosított oszlop identitásoszlop, new_data_type olyan adattípusnak kell lennie, amely támogatja az identitástulajdonságot.
- A rendszer figyelmen kívül hagyja az
SET ARITHABORTaktuális beállítást.ALTER TABLEúgy működik, minthaARITHABORTa következőreONvan állítva: .
Note
Ha a COLLATE záradék nincs megadva, az oszlop adattípusának módosítása az adatbázis alapértelmezett rendezési pontjára módosítja a rendezést.
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 varbináris adattípusokra vonatkozik 2^31-1 bájt karakter, bináris és Unicode-adatok tárolására.
xml_schema_collection
A következőkre vonatkozik: SQL Server és Azure SQL Database.
Csak a xml adattípusra vonatkozik, ha xml-sémát társít a típussal. Mielőtt XML- oszlopot ír be egy sémagyűjteménybe, először CREATE XML SCHEMA COLLECTIONhasználatával hozza létre a sémagyűjteményt az adatbázisban.
< COLLATION_NAME> RENDEZÉSE
A módosított oszlop új rendezési adatait adja meg. Ha nincs megadva, az oszlop az adatbázis alapértelmezett rendezési eleméhez van rendelve. A rendezés neve lehet Windows-rendezési név vagy SQL-rendezés neve. A lista és további információkért tekintse meg a Windows rendezési nevét és az SQL Server rendezési nevét.
A COLLATE záradék csak a karakter, a varchar, az nchar és az nvarchar adattípusok oszlopainak rendezéseit módosítja. Ha módosítani szeretné egy felhasználó által definiált alias adattípus oszlopának rendezést, az oszlopot külön ALTER TABLE utasításokkal sql serveres adattípusra módosíthatja. Ezután módosítsa a rendezést, és módosítsa az oszlopot alias adattípusra.
ALTER COLUMN a rendezés nem módosítható, ha az alábbi feltételek közül legalább egy létezik:
- A
CHECKkényszer,FOREIGN KEYa kényszer vagy a számított oszlopok a módosított oszlopra hivatkoznak. - Az oszlopban minden index, statisztika vagy teljes szöveges index létrejön. A módosított oszlopon automatikusan létrehozott statisztikákat a rendszer elveti, ha az oszlop rendezése módosul.
- A séma által kötött nézet vagy függvény az oszlopra hivatkozik.
A támogatott rendezésekkel kapcsolatos további információkért lásd: COLLATE.
NULL | NEM NULL
Megadja, hogy az oszlop elfogad-e null értékeket. A null értékeket nem engedélyező oszlopok csak akkor lesznek hozzáadva ALTER TABLE , ha alapértelmezés szerint vannak megadva, vagy ha a tábla üres. A számított oszlopok csak akkor adhatók meg NOT NULL , ha ön is megadott PERSISTED. Ha az új oszlop null értékeket engedélyez, és nem ad meg alapértelmezett értéket, az új oszlop null értéket tartalmaz a tábla minden sorához. Ha az új oszlop null értékeket engedélyez, és hozzáad egy alapértelmezett definíciót az új oszlophoz, az alapértelmezett értéket az új oszlopban tárolhatja WITH VALUES a tábla minden meglévő sorához.
Ha az új oszlop nem engedélyezi a null értékeket, és a tábla nem üres, hozzá kell adnia egy definíciót DEFAULT az új oszlophoz. Az új oszlop automatikusan betöltődik az alapértelmezett értékkel az egyes meglévő sorok új oszlopaiban.
Megadhatja NULL , ALTER COLUMN hogy az NOT NULL oszlopokat null értékek engedélyezésére kényszerítse, kivéve a kényszerben lévő PRIMARY KEY oszlopokat. Csak akkor adhat meg értéket NOT NULLALTER COLUMN , ha az oszlop nem tartalmaz null értékeket. A null értékeket frissíteni kell valamilyen értékre, mielőtt engedélyezve ALTER COLUMNNOT NULL lenne, például:
UPDATE MyTable SET NullCol = N'some_value' WHERE NullCol IS NULL;
ALTER TABLE MyTable ALTER COLUMN NullCOl NVARCHAR (20) NOT NULL;
Amikor táblákat hoz létre vagy CREATE TABLE módosít az ALTER TABLE adott utasításokkal, 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 érvénytelenségét. Győződjön meg arról, hogy mindig explicit módon definiál egy oszlopot nem megfelelő oszlopokként NULL vagy NOT NULL nem megfelelő oszlopokként.
Ha felhasználó által definiált adattípussal rendelkező oszlopot ad hozzá, ügyeljen arra, hogy a felhasználó által megadott adattípussal azonos null értékű oszlopot definiáljon. Adja meg az oszlop alapértelmezett értékét. További információ: CREATE TABLE.
Note
Ha NULL van NOT NULL megadva ALTER COLUMN, new_data_type [(pontosság [, skálázás ])] is meg kell adni. Ha az adattípus, a pontosság és a skálázás nem változik, adja meg az aktuális oszlopértékeket.
[ {ADD | EJTÉS
A következőkre vonatkozik: SQL Server és Azure SQL Database.
Azt adja meg, hogy a ROWGUIDCOL tulajdonság hozzá legyen adva a megadott oszlophoz vagy elvetve a megadott oszlopból.
ROWGUIDCOL azt jelzi, hogy az oszlop egy sor GUID oszlopa. Táblánként csak egy uniqueidentifier oszlopot állíthat be oszlopként ROWGUIDCOL . A tulajdonságot pedig csak egy ROWGUIDCOL oszlophoz rendelheti. Felhasználó által definiált adattípus oszlopához nem rendelhető hozzá ROWGUIDCOL .
ROWGUIDCOL nem kényszeríti ki az oszlopban tárolt értékek egyediségét, és 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 a NEWID() vagy NEWSEQUENTIALID() függvényt INSERT utasításokban. Vagy adja meg az oszlop alapértelmezett NEWID() vagy NEWSEQUENTIALID() függvényét.
[ {ADD | DROP} MEGŐRZVE ]
Azt adja meg, hogy a PERSISTED tulajdonság hozzá legyen adva a megadott oszlophoz vagy elvetve a megadott oszlopból. Az oszlopnak egy determinisztikus kifejezéssel definiált számított oszlopnak kell lennie. A megadott PERSISTEDoszlopok esetében az adatbázismotor fizikailag tárolja a számított értékeket a táblában, és frissíti az értékeket, amikor bármely más oszlop, amelytől a számított oszlop függ, frissülnek. Ha egy számított oszlopot úgy jelöl meg, PERSISTEDhogy a determinisztikus, de nem pontos kifejezéseken definiált számított oszlopokon indexeket hozhat létre. További információt a számított oszlopok indexei című témakörben talál.
SET QUOTED_IDENTIFIER Akkor kell lennie ON , ha számított oszlopokon vagy indexelt nézeteken hoz létre vagy módosít indexeket. További információ: SET QUOTED_IDENTIFIER.
A particionált táblák particionálási oszlopaként használt számítási oszlopokat explicit módon kell megjelölni PERSISTED.
Note
A Fabric SQL-adatbázisban a számított oszlopok engedélyezettek, de jelenleg nem tükrözhetők a Fabric OneLake-be.
NE DOBJ LE REPLIKÁCIÓHOZ
A következőkre vonatkozik: SQL Server és Azure SQL Database.
Megadja, hogy a replikációs ügynökök beszúrási műveleteket hajtanak végre az identitásoszlopokban. Ezt a záradékot csak akkor adhatja meg, ha column_name identitásoszlop.
SPARSE
Azt jelzi, hogy az oszlop ritka oszlop. A ritka oszlopok tárolása null értékekre van optimalizálva. A ritka oszlopokat nem állíthatja be .NOT NULL Ha egy oszlopot a ritka helyről a nem elemire, vagy a nem elemelemzésből ritkává alakít át, ez a beállítás zárolja a táblát a parancs végrehajtásának időtartamára. Előfordulhat, hogy a záradékot kell használnia a REBUILD helymegtakarítások visszaszerzéséhez. További korlátozásokért és a ritka oszlopokkal kapcsolatos további információkért lásd: Ritka oszlopok használata.
ADD MASKED WITH (FÜGGVÉNY = 'mask_function')
A következőkre vonatkozik: AZ SQL Server 2016 (13.x) és újabb verziói, valamint az Azure SQL Database.
Dinamikus adatmaszkot ad meg. mask_function a maszkoló függvény neve a megfelelő paraméterekkel. Három függvény érhető el:
- default()
- email()
- partial()
- random()
Engedélyre van szükség ALTER ANY MASK .
Maszk elvetéséhez használja a DROP MASKED. A függvényparaméterekről a Dinamikus adatmaszkolás című témakörben olvashat.
A maszk hozzáadásához és elvetéséhez engedély szükséges ALTER ANY MASK .
WITH ( ONLINE = ON | KI) <egy oszlop> módosítására vonatkozik
A következőkre vonatkozik: AZ SQL Server 2016 (13.x) és újabb verziói, valamint az Azure SQL Database.
Számos módosító oszlopművelet végrehajtását teszi lehetővé, amíg a tábla elérhető marad. Az alapértelmezett érték OFF. Az alter column online futtatható az adattípussal, az oszlophosszsal vagy a pontosságtal, a nulllással, a ritkasággal és a rendezéssel kapcsolatos oszlopmódosításokhoz.
Az online alter oszlop lehetővé teszi, hogy a felhasználó létrehozott és automatikusan hivatkozzon a módosított oszlopra a ALTER COLUMN művelet időtartamára, ami lehetővé teszi a lekérdezések szokásos módon való futtatását. A művelet végén a rendszer elveti az oszlopra hivatkozó automatikus statisztikákat, és érvényteleníti a felhasználó által létrehozott statisztikákat. A felhasználónak manuálisan kell frissítenie a felhasználó által létrehozott statisztikákat a művelet befejezése után. Ha az oszlop bármely statisztika vagy index szűrőkifejezésének része, akkor nem hajthat végre módosító oszlopműveletet.
Amíg az online alter column művelet fut, az adott oszloptól függő DDL-művelet (például indexek, nézetek létrehozása vagy módosítása stb.) le van tiltva, vagy megfelelő hibával meghiúsul. Ez a viselkedés garantálja, hogy az online alter oszlop nem hiúsul meg a művelet futtatása közben bevezetett függőségek miatt.
Az oszlopok
NOT NULLNULLközötti módosítás nem támogatott online műveletként, ha a módosított oszlopra nem kizárólagos indexek hivatkoznak.Az online
ALTERállapot nem támogatott, ha az oszlopra ellenőrzési korlátozás hivatkozik, és aALTERművelet korlátozza az oszlop pontosságát (numerikus vagy datetime).A
WAIT_AT_LOW_PRIORITYbeállítás nem használható online alter oszlopokkal.ALTER COLUMN ... ADD/DROP PERSISTEDnem támogatott az online alter oszlop.ALTER COLUMN ... ADD/DROP ROWGUIDCOL/NOT FOR REPLICATIONnem érinti az online alter oszlop.Az online módosító oszlop nem támogatja egy olyan tábla módosítását, amelyben engedélyezve van a változáskövetés, vagy amely az egyesítési replikáció közzétevője.
Az online módosító oszlop nem támogatja a CLR-adattípusok közötti módosítást.
Az online módosító oszlop nem támogatja olyan XML-adattípusra való módosítást, amelynek sémagyűjteménye eltér az aktuális sémagyűjteményétől.
Az online módosító oszlop nem csökkenti az oszlop módosításának korlátozásait. Az indexek/statisztikák stb. alapján történő hivatkozások a módosítás meghiúsulását okozhatják.
Az online módosító oszlop nem támogatja egynél több oszlop egyidejű módosítását.
Az online alter oszlopnak nincs hatása a rendszer által verziózott időtáblákban.
ALTERaz oszlop nem online állapotban fut, függetlenül attól, hogy melyik érték lett megadva a beállításhozONLINE.
Az online alter oszlop hasonló követelményekkel, korlátozásokkal és funkciókkal rendelkezik, mint az online index újraépítése, amely a következőket foglalja magában:
- Az online index újraépítése nem támogatott, ha a tábla régebbi LOB- vagy fájlstreamoszlopokat tartalmaz, vagy ha a tábla oszlopcentrikus indexet tartalmaz. Ugyanezek a korlátozások vonatkoznak az online alter oszlopra is.
- A módosítandó meglévő oszlopokhoz kétszer akkora területkiosztásra van szükség, mint az eredeti oszlophoz és az újonnan létrehozott rejtett oszlophoz.
- Az alter column online művelet során alkalmazott zárolási stratégia ugyanazt a zárolási mintát követi, amelyet az online indexek összeállításához használnak.
WITH CHECK | NINCS BEJELÖLÉSSEL
Megadja, hogy a táblában lévő adatok egy újonnan hozzáadott vagy újraengedélyezett FOREIGN KEY vagy kényszer alapján vannak-e érvényesítve.CHECK Ha nem adja meg, WITH CHECK a rendszer új kényszereket feltételez, és WITH NOCHECK az újraengedélyezett kényszerek esetében feltételezi.
Ha nem szeretné ellenőrizni az új CHECK vagy FOREIGN KEY a meglévő adatokra vonatkozó korlátozásokat, használja a következőt WITH NOCHECK: Ezt nem javasoljuk, kivéve a ritka eseteket. Az új korlátozás kiértékelése az összes későbbi adatfrissítésben történik. A kényszer hozzáadásakor letiltott WITH NOCHECK kényszersértések a jövőbeni frissítések meghiúsulását okozhatják, ha a kényszert nem követő adatokkal frissítik a sorokat. A lekérdezésoptimalizáló nem veszi figyelembe a definiált WITH NOCHECKkorlátozásokat. Ezek a korlátozások mindaddig figyelmen kívül lesznek hagyva, amíg újra nem engedélyezik őket a ALTER TABLE table WITH CHECK CHECK CONSTRAINT ALLhasználatával. További információ: Idegenkulcs-korlátozások letiltása INSERT és UPDATE utasításokkal.
ALTERNATÍV INDEX index_name
Megadja, hogy a index_name gyűjtőszámát módosítani vagy módosítani kell.
A szintaxis ALTER TABLE ... ADD/DROP/ALTER INDEX csak memóriaoptimalizált táblák esetében támogatott.
Important
Utasítás használata ALTER TABLE nélkül a CREATE INDEX, DROP INDEX, ALTER INDEX és PAD_INDEX utasítás nem támogatott a memóriaoptimalizált táblák indexeihez.
ADD
Egy vagy több oszlopdefiníciót, számított oszlopdefiníciót vagy táblakorlátozást ad hozzá. Vagy a rendszer a rendszer verziószámozásához használt oszlopokat is hozzáadja. A memóriaoptimalizált táblákhoz indexet is hozzáadhat.
Note
A rendszer új oszlopokat ad hozzá a tábla összes meglévő oszlopának módosítása után.
Important
Utasítás használata ALTER TABLE nélkül a CREATE INDEX, DROP INDEX, ALTER INDEX és PAD_INDEX utasítás nem támogatott a memóriaoptimalizált táblák indexeihez.
SYSTEM_TIME IDŐSZAKA ( system_start_time_column_name, system_end_time_column_name )
A következőkre vonatkozik: AZ SQL Server 2017 (14.x) és újabb verziói, valamint az Azure SQL Database.
Megadja azoknak az oszlopoknak a nevét, amelyeket a rendszer a rekord érvényességének időtartamának rögzítésére használ. Megadhatja a meglévő oszlopokat, vagy létrehozhat új oszlopokat az ADD PERIOD FOR SYSTEM_TIME argumentum részeként. Állítsa be az oszlopokat a datetime2 adattípussal, és definiálja őket .NOT NULL Ha pontoszlopot határoz meg, NULLhibaüzenet jelenik meg. A system_start_time és system_end_time oszlopokhoz megadhat column_constraint és/vagy alapértelmezett értékeket . A következő Rendszerverzió-készítés példák az A példában, amely bemutatja, hogy a system_end_time oszlop alapértelmezett értékét használja.
Ezzel az argumentummal egy SET SYSTEM_VERSIONING meglévő táblát időleges táblává alakíthat. További információt a Temporális táblák és a Temporális táblák használatának első lépései című témakörben talál.
Az SQL Server 2017 -ről (14.x) a felhasználók megjelölhetnek egy vagy mindkét pontoszlopot jelölővel HIDDEN , hogy implicit módon elrejtsék ezeket az oszlopokat, így SELECT * FROM <table_name> nem ad vissza értéket az oszlopoknak. 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.
DROP
Megadja, hogy egy vagy több oszlopdefiníció, számított oszlopdefiníció vagy táblakorlátozás elvetése vagy a rendszer verziószámozásához használt oszlopok specifikációjának elvetése.
Note
A főkönyvtáblákban elvetett oszlopok csak helyreállíthatóan törlődnek. Az elvetett oszlopok a főkönyvtáblában maradnak, de a program elvetett oszlopként jelöli meg, ha az oszlopot a dropped_ledger_table következőre sys.tablesállítja 1 be. Az elvetett főkönyvtábla főkönyvi nézete is eldobottként van megjelölve, ha a dropped_ledger_viewsys.tables oszlopát 1értékre állítja. Az elvetett főkönyvtáblát, annak előzménytábláját és főkönyvnézetét úgy nevezik át, hogy hozzáad egy előtagot (MSSQL_DroppedLedgerTable, MSSQL_DroppedLedgerHistory, MSSQL_DroppedLedgerView), és hozzáfűz egy GUID azonosítót az eredeti névhez.
KÉNYSZER constraint_name
Megadja, hogy a constraint_name el legyen távolítva a táblából. Több korlátozás is szerepelhet a listában.
A korlátozás felhasználó által definiált vagy rendszer által megadott nevét a sys.check_constraint, sys.default_constraints, sys.key_constraintsés sys.foreign_keys katalógusnézetek lekérdezésével határozhatja meg.
Nem PRIMARY KEY lehet elvetni a kényszert, ha létezik XML-index a táblában.
INDEX index_name
Megadja, hogy a index_name el legyen távolítva a táblából.
A szintaxis ALTER TABLE ... ADD/DROP/ALTER INDEX csak memóriaoptimalizált táblák esetében támogatott.
Important
Utasítás használata ALTER TABLE nélkül a CREATE INDEX, DROP INDEX, ALTER INDEX és PAD_INDEX utasítás nem támogatott a memóriaoptimalizált táblák indexeihez.
OSZLOP column_name
Megadja, hogy constraint_name vagy column_name el legyen távolítva a táblából. Több oszlop is szerepelhet a listában.
Az oszlopokat nem lehet elvetni, ha az a következő:
- Indexben használható, akár kulcsoszlopként, akár
INCLUDE - Egy ,
CHECK,FOREIGN KEYvagyUNIQUEkényszerbenPRIMARY KEYhasználatos. - A kulcsszóval
DEFAULTdefiniált vagy egy alapértelmezett objektumhoz kötött alapértelmezett objektumhoz van társítva. - Szabályhoz kötött.
Note
Az oszlop elvetése nem veszi vissza az oszlop lemezterületét. Előfordulhat, hogy vissza kell vennie egy eldobott oszlop lemezterületét, ha egy tábla sormérete megközelíti vagy túllépte a korlátot. Tér visszanyerése fürtözött index táblán való létrehozásával vagy meglévő fürtözött index újraépítésével ALTER INDEXhasználatával. A LOB-adattípusok elvetésének hatásáról ebben a CSS-blogbejegyzésbenolvashat.
SYSTEM_TIME IDŐSZAKA
A következőkre vonatkozik: AZ SQL Server 2016 (13.x) és újabb verziói, valamint az Azure SQL Database.
Elveti a rendszer által a rendszer verziószámozásához használt oszlopok specifikációját.
A <drop_clustered_constraint_option>
Megadja, hogy egy vagy több elvetett fürtözött kényszerbeállítás be van-e állítva.
MAXDOP = max_degree_of_parallelism
A következőkre vonatkozik: SQL Server és Azure SQL Database.
A maximális párhuzamossági fokot konfigurációs beállítást csak a művelet időtartamára bírálja felül. További információ: Kiszolgálókonfiguráció: a párhuzamosság maximális foka.
Ezzel a MAXDOP beállítással korlátozhatja a párhuzamos terv végrehajtásához használt processzorok számát. A maximális érték 64 processzor.
max_degree_of_parallelism a következő értékek egyike lehet:
1Letiltja a párhuzamos tervgenerálást.
>1A párhuzamos indexműveletekben használt processzorok maximális számát a megadott számra korlátozza.
0(alapértelmezett)A processzorok tényleges számát használja, vagy kevesebbet az aktuális rendszerterhelés alapján.
További információ: Párhuzamos indexelési műveletek konfigurálása.
Note
A párhuzamos indexműveletek nem érhetők el az SQL Server minden kiadásában. További információkért lásd az SQL Server 2022
ONLINE = { ON | OFF} <a drop_clustered_constraint_option>
Megadja, hogy a mögöttes táblák és a kapcsolódó indexek elérhetők-e a lekérdezésekhez és az adatok módosításához az indexművelet során. Az alapértelmezett érték a OFF. Futtatható REBUILD műveletként ONLINE .
ON
A hosszú távú táblazárolások nem az indexművelet idejére lesznek tárolva. Az indexművelet fő fázisában csak szándékmegosztási (
IS) zárolás van tárolva a forrástáblán. Ez a viselkedés lehetővé teszi a mögöttes tábla és indexek lekérdezéseinek vagy frissítéseinek folytatását. A művelet elején egy megosztott (S) zárolás van tárolva a forrásobjektumon egy rövid ideig. A művelet végén a rendszer rövid ideig S (megosztott) zárolást szerez be a forráson, ha létrehoz egy nemclustered indexet. Vagy Sch-M (sémamódosítási) zárolást akkor szerez be a rendszer, ha egy fürtözött indexet hoz létre vagy elvet online, és amikor egy fürtözött vagy nem rendezett indexet újjáépít.ONLINEnem állítható be,ONhogy mikor jön létre index egy helyi ideiglenes táblában. Csak az egyszálas halom újraépítési művelete engedélyezett.A DDL futtatásához vagy az online index újraépítéséhez
SWITCHegy adott táblán futó összes aktív blokkoló tranzakciót végre kell hajtani. A végrehajtás során a vagy az újraépítési művelet megakadályozza azSWITCHúj tranzakciók indítását, és jelentős hatással lehet a számítási feladatok átviteli sebességére, és ideiglenesen késleltetheti a mögöttes táblához való hozzáférést.OFF
A táblazárolások az indexművelet időtartamára vonatkoznak. Egy offline indexművelet, amely fürtözött indexet hoz létre, újjáépít vagy elvet, vagy újraépít vagy elvet egy nemclustered indexet, sémamódosítási (Sch-M) zárolást szerez be a táblán. Ez a zárolás megakadályozza, hogy a művelet időtartama alatt minden felhasználó hozzáférjen a mögöttes táblához. Egy offline indexművelet, amely nemclustered indexet hoz létre, egy megosztott (S) zárolást szerez be a táblán. Ez a zárolás megakadályozza a mögöttes tábla frissítéseit, de olvasási műveleteket, például
SELECTutasításokat tesz lehetővé. A többszálas halom újraépítési műveletei engedélyezettek.További információ: Az online indexműveletek működése.
Note
Az online indexelési műveletek nem érhetők el az SQL Server minden kiadásában. További információkért lásd az SQL Server 2022
kiadásait és támogatott funkcióit.
ÁTHELYEZÉS { partition_scheme_name(column_name [ ,...n ] ) | fájlcsoport | "default" }
A következőkre vonatkozik: SQL Server és Azure SQL Database.
Megadja a fürtözött index levélszintjén jelenleg lévő adatsorok áthelyezésének helyét. A rendszer áthelyezi a táblát az új helyre. Ez a beállítás csak a fürtözött indexet létrehozó korlátozásokra vonatkozik.
Note
Ebben a kontextusban default nem kulcsszó. Ez az alapértelmezett fájlcsoport azonosítója, és el kell tagoltnak lennie, mint a fájlban vagy MOVE TO "default"a fájlbanMOVE TO [default]. Ha "default" meg van adva, a QUOTED_IDENTIFIER beállításnak az aktuális munkamenethez kell lennie ON . Ez az alapértelmezett beállítás. További információ: SET QUOTED_IDENTIFIER.
{ CHECK | NOCHECK } KÉNYSZER
Megadja, hogy a constraint_name engedélyezve van-e vagy le van tiltva. Ez a beállítás csak korlátozásokkal és FOREIGN KEY korlátozásokkal CHECK használható. Ha NOCHECK meg van adva, a korlátozás le van tiltva, és az oszlop jövőbeli beszúrásai vagy frissítései nem lesznek érvényesítve a kényszerfeltételek alapján.
DEFAULT, PRIMARY KEYés UNIQUE a korlátozások nem tilthatók le.
ALL
Megadja, hogy az összes korlátozás le van tiltva a
NOCHECKbeállítással, vagy engedélyezve van aCHECKbeállítással.
{ ENABLE | KIKAPCSOLÁS } TRIGGER
Megadja, hogy a trigger_name engedélyezve van-e vagy le van tiltva. Ha egy eseményindító le van tiltva, akkor is definiálva lesz a táblához. Ha INSERTazonban az , UPDATEvagy DELETE utasítások a táblán futnak, az eseményindító műveletei csak akkor lesznek végrehajtva, ha az eseményindító újra engedélyezve van.
ALL
Megadja, hogy a tábla összes eseményindítója engedélyezve vagy letiltva legyen.
trigger_name
Megadja a letiltani vagy engedélyezni kívánt eseményindító nevét.
{ ENABLE | KIKAPCSOLÁS } CHANGE_TRACKING
A következőkre vonatkozik: SQL Server és Azure SQL Database.
Megadja, hogy a változáskövetés engedélyezve van-e a táblában. Alapértelmezés szerint a változáskövetés le van tiltva.
Ez a beállítás csak akkor érhető el, ha a változáskövetés engedélyezve van az adatbázisban. További információ: ALTER DATABASE SET options.
A változáskövetés engedélyezéséhez a táblának elsődleges kulccsal kell rendelkeznie.
WITH ( TRACK_COLUMNS_UPDATED = { ON | KI } )
A következőkre vonatkozik: SQL Server és Azure SQL Database.
Megadja, hogy az adatbázismotor nyomon követi-e a korrektúrákat módosító oszlopokat. Az alapértelmezett érték a OFF.
KAPCSOLÓ [ PARTITION source_partition_number_expression ] TO [ schema_name. ] target_table [ PARTÍCIÓ TARGET_PARTITION_NUMBER_EXPRESSION ]
A következőkre vonatkozik: SQL Server és Azure SQL Database.
Az adatblokkot az alábbi módok egyikével válthatja át:
- Egy tábla összes adatát újra hozzárendeli partícióként egy már meglévő particionált táblához.
- Partíció váltása egyik particionált tábláról a másikra.
- A particionált tábla egyik partíciójában lévő összes adatot újra hozzárendeli egy meglévő, nem particionált táblához.
Ha tábla particionált tábla, meg kell adnia source_partition_number_expression. Ha target_table particionált, meg kell adnia target_partition_number_expression. Ha egy tábla adatait partícióként rendeli hozzá egy már meglévő particionált táblához, vagy egy partíciót egyik particionált tábláról a másikra vált, a célpartíciónak léteznie kell, és üresnek kell lennie.
Ha egyetlen partíció adatait rendeli hozzá egyetlen tábla létrehozásához, a céltáblának már léteznie kell, és üresnek kell lennie. A forrástáblának vagy partíciónak, valamint a céltáblának vagy partíciónak ugyanabban a fájlcsoportban kell lennie. A megfelelő indexeknek vagy indexpartícióknak ugyanabban a fájlcsoportban kell lenniük. A partíciók közötti váltásra számos további korlátozás vonatkozik. tábla és target_table nem lehetnek azonosak. target_table többrészes azonosító lehet.
A source_partition_number_expression és a target_partition_number_expression állandó kifejezések, amelyek változókra és függvényekre hivatkozhatnak. Ezek közé tartoznak a felhasználó által definiált típusváltozók és a felhasználó által definiált függvények. Nem hivatkozhatnak Transact-SQL kifejezésekre.
A fürtözött oszlopcentrikus indexet tartalmazó particionált táblák particionált halomként viselkednek:
- Az elsődleges kulcsnak tartalmaznia kell a partíciókulcsot.
- Az egyedi indexnek tartalmaznia kell a partíciókulcsot. Ha azonban a partíciókulcsot egy meglévő egyedi indexszel együtt tartalmazza, az megváltoztathatja az egyediséget.
- A partíciók közötti váltáshoz minden nemclustered indexnek tartalmaznia kell a partíciókulcsot.
A replikáció használatakor korlátozást SWITCH a particionált táblák és indexek replikálása című témakörben talál.
A nemclustered oszlopcentrikus indexek írásvédett formátumban lettek létrehozva az SQL Server 2016 (13.x) és az SQL Database esetében a V12-es verzió előtt. A műveletek futtatása előtt PARTITION újra kell építeni a nemclustered oszlopcentrikus indexeket az aktuális formátumra (ami frissíthető).
Limitations
Ha mindkét tábla particionálása azonos, beleértve a nemclustered indexeket is, és a céltábla nem tartalmaz nemclustered indexeket, 4907-es hiba jelenhet meg.
Példakimenet:
Msg 4907, Level 16, State 1, Line 38
'ALTER TABLE SWITCH' statement failed. The table 'MyDB.dbo.PrtTable1' has 4 partitions while index 'MS1' has 6 partitions.
SET ( FILESTREAM_ON = { partition_scheme_name | filestream_filegroup_name | "alapértelmezett" | "NULL" })
A következőkre vonatkozik: SQL Server. Az Azure SQL Database nem támogatja a FILESTREAM.
Megadja a FILESTREAM-adatok tárolásának helyét.
ALTER TABLE a SET FILESTREAM_ON záradék csak akkor sikeres, ha a tábla nem tartalmaz FILESTREAM oszlopokat. A FILESTREAM-oszlopokat egy második ALTER TABLE utasítással is hozzáadhatja.
Ha
filestream_filegroup_name egy FILESTREAM-fájlcsoport nevét adja meg. A fájlcsoportnak rendelkeznie kell egy fájllal, amelyet a fájlcsoporthoz a CREATE DATABASE vagy az ALTER DATABASE utasítással definiált, vagy hibaüzenet jelenik meg.
"default" a FILESTREAM fájlcsoportot adja meg a DEFAULT tulajdonságkészlettel. Ha nincs FILESTREAM fájlcsoport, hibaüzenet jelenik meg.
"NULL" azt határozza meg, hogy a tábla FILESTREAM-fájlcsoportjaira mutató összes hivatkozás el legyen távolítva. Először az összes FILESTREAM-oszlopot el kell dobni. A táblához társított összes FILESTREAM-adat törlésére használható SET FILESTREAM_ON = "NULL" .
SET ( SYSTEM_VERSIONING = { KI | ON [ ( HISTORY_TABLE = schema_name . history_table_name [ , DATA_CONSISTENCY_CHECK = { ON | OFF } ] ] } ) )
A következőkre vonatkozik: AZ SQL Server 2016 (13.x) és újabb verziói, valamint az Azure SQL Database.
Letiltja vagy engedélyezi egy tábla rendszerverziósítását. Egy tábla rendszerverziósításának engedélyezéséhez a rendszer ellenőrzi, hogy teljesülnek-e a rendszer verziószámozásának adattípusára, nullhiba-korlátozására és elsődleges kulcskényszerítési követelményeire vonatkozó követelmények. 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 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, kapcsolatot hoz létre a két tábla között, és lehetővé teszi a rendszer számára, hogy rögzítse az egyes rekordok előzményeit az aktuális táblában az előzménytáblában. Ha a HISTORY_TABLE argumentumot használja egy meglévő előzménytáblára mutató hivatkozás létrehozásához és használatához, a rendszer létrehoz egy hivatkozást az aktuális tábla és a megadott tábla között. 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 futtatása az alapértelmezett. A SYSTEM_VERSIONING = ON záradékkal definiált tábla PERIOD FOR SYSTEM_TIME argumentumával a meglévő táblát időleges táblává teheti. További információ: Temporális táblák.
HISTORY_RETENTION_PERIOD = { VÉGTELEN | szám { NAP | NAPOK | HÉT | HETEK | HÓNAP | HÓNAPOK | ÉV | YEARS } }
A következővonatkozik: SQL Server 2017 (14.x) és Azure SQL Database.
Véges vagy végtelen adatmegőrzést ad meg egy időbeli táblában lévő előzményadatokhoz. Ha nincs megadva, a függvény végtelen megőrzést feltételez.
DATA_DELETION
A következőkre vonatkozik: Azure SQL Edge-csak
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.
SET ( LOCK_ESCALATION = { AUTO | TÁBLÁZAT | DISABLE } )
A következőkre vonatkozik: SQL Server és Azure SQL Database.
A tábla zárolásának eszkalálásának engedélyezett módszereit adja meg.
AUTO
Ezzel a beállítással az SQL Server adatbázismotorja kiválaszthatja a táblaséma számára megfelelő zároláseszkalációs részletességet.
Ha a tábla particionálva van, a zárolás eszkalációja engedélyezett a halom vagy a B-fa (HoBT) részletességére. Más szóval az eszkaláció a partíciószintre engedélyezett. Miután a zárolást a HoBT szintre eszkalálták, a zárolás nem lesz később eszkalálódik a részletesség érdekében
TABLE.Ha a tábla nincs particionálva, a zárolás eszkalálása a
TABLErészletesség érdekében történik.
TABLE
A zárolás eszkalálása táblaszintű részletességgel történik, függetlenül attól, hogy a tábla particionálva van-e, vagy nincs particionálva.
TABLEaz alapértelmezett érték.DISABLE
A legtöbb esetben megakadályozza a zárolás eszkalálását. A táblaszintű zárolások nincsenek teljesen letiltva. Ha például olyan táblát vizsgál, amely nem tartalmaz csoportosított indexet a szerializálható elkülönítési szint alatt, az adatbázismotornak táblazárolást kell alkalmaznia az adatintegritás védelme érdekében.
REBUILD
REBUILD WITH A szintaxis használatával újraépíthet egy teljes táblát, beleértve a particionált táblák összes partícióit is. Ha a tábla fürtözött indexet tartalmaz, a REBUILD beállítás újraépíti a fürtözött indexet.
REBUILD futtatható műveletként ONLINE .
REBUILD PARTITION A szintaxis használatával újraépíthet egy partíciót egy particionált táblában.
PARTÍCIÓ = MINDEN
A következőkre vonatkozik: SQL Server és Azure SQL Database.
Újraépíti az összes partíciót a partíciótömörítési beállítások módosításakor.
ÚJRAÉPÍTÉS ( <rebuild_option> )
Minden beállítás egy fürtözött indexet tartalmazó táblára vonatkozik. Ha a tábla nem tartalmaz fürtözött indexet, a halomszerkezetet csak néhány lehetőség befolyásolja.
Ha egy adott tömörítési beállítás nincs megadva a REBUILD művelettel, a rendszer a partíció aktuális tömörítési beállítását használja. Az aktuális beállítás visszaadásához kérdezze le a data_compression oszlopot a sys.partitions katalógusnézetben.
Az újraépítési beállítások teljes leírását az ALTER TABLE index_optioncímű témakörben talál.
DATA_COMPRESSION
A következőkre vonatkozik: SQL Server és Azure SQL Database.
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. Ez a beállítás nem vonatkozik az oszlopcentrikus táblákra.
SOR
A táblázat vagy a megadott partíciók sortömörítéssel vannak tömörítve. Ez a beállítás nem vonatkozik az oszlopcentrikus táblákra.
OLDAL
A táblázat vagy a megadott partíciók laptömörítéssel vannak tömörítve. Ez a beállítás nem vonatkozik az oszlopcentrikus táblákra.
COLUMNSTORE
A következőkre vonatkozik: AZ SQL Server 2014 (12.x) és újabb verziói, valamint az Azure SQL Database.
Csak oszlopcentrikus táblákra vonatkozik.
COLUMNSTOREa beállítással tömörített partíció felbontásátCOLUMNSTORE_ARCHIVEadja meg. Az adatok visszaállításakor a rendszer továbbra is tömöríti azokat az oszlopcentrikus tömörítéssel, amely az összes oszlopcentrikus táblához használatos.COLUMNSTORE_ARCHIVE
A következőkre vonatkozik: AZ SQL Server 2014 (12.x) és újabb verziói, valamint az Azure SQL Database.
Csak az oszlopcentrikus táblákra vonatkozik, amelyek fürtözött oszlopcentrikus indexben tárolt táblák.
COLUMNSTORE_ARCHIVEa megadott partíciót kisebb méretűre tömöríti. Ezt a lehetőséget olyan archiválási vagy más helyzetekben használhatja, amelyek kevesebb tárhelyet igényelnek, és több időt engedhetnek meg a tárolásra és a lekérésre.Ha egyszerre több partíciót szeretne újraépíteni, tekintse meg a index_option. Ha a táblában nincs fürtözött index, az adattömörítés módosítása újraépíti a halom és a nem rendezett indexeket. A tömörítésről további információt az Adattömörítés című témakörben talál.
ALTER TABLE REBUILD PARTITION WITH DATA COMPRESSION = ROWvagyPAGEnem engedélyezett SQL adatbázisban a Microsoft Fabricben.
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.
ONLINE = { ON | OFF } <a single_partition_rebuild_option>
Megadja, hogy a mögöttes táblák és a kapcsolódó indexek egyetlen partíciója elérhető-e a lekérdezésekhez és az adatok módosításához az indexművelet során. Az alapértelmezett érték a OFF. Futtatható REBUILD műveletként ONLINE .
ON
A hosszú távú táblazárolások nem az indexművelet idejére lesznek tárolva. A táblán az index újraépítésének elején S-lock szükséges, az online index-újraépítés végén pedig egy Sch-M zárolás szükséges a táblán. Bár mindkét zárolás rövid metaadat-zárolás, a Sch-M zárolásnak meg kell várnia az összes blokkoló tranzakció befejezését. A várakozási idő alatt a Sch-M zárolás blokkolja a zárolás mögött várakozó összes többi tranzakciót, amikor ugyanahhoz a táblához fér hozzá.
Note
Az online index újraépítése a szakasz későbbi részében ismertetett
low_priority_lock_waitbeállításokat is megadhatja.OFF
A rendszer táblazárolásokat alkalmaz az indexművelet időtartamára. Ez megakadályozza, hogy a művelet időtartama alatt minden felhasználó hozzáférjen a mögöttes táblához.
column_set_name ALL_SPARSE_COLUMNS XML-COLUMN_SET
A következőkre vonatkozik: SQL Server és Azure SQL Database.
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észletek nem vehetők fel ritka oszlopokat tartalmazó táblába. Az oszlopkészletekről további információt az Oszlopkészletek használata című témakörben talál.
{ ENABLE | TILTSD KI } FILETABLE_NAMESPACE
A következőkre vonatkozik: SQL Server.
Engedélyezi vagy letiltja a rendszer által meghatározott korlátozásokat a FileTable-on. Csak Fájltáblával használható.
SET ( FILETABLE_DIRECTORY = directory_name )
A következőkre vonatkozik: SQL Server. Az Azure SQL Database nem támogatja a FileTable-t.
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 az SQL-rendezési beállítások ellenére nem érzéketlen a kis- és nagybetűk között. Csak Fájltáblával használható.
REMOTE_DATA_ARCHIVE
A következőkre vonatkozik: SQL Server 2017 (14.x) és újabb verziók.
Engedélyezi vagy letiltja a Stretch Database használatát egy táblához. 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 egy táblához
Ha ONmegadásával engedélyezi a Stretchet egy táblához, meg kell adnia 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 a táblához is engedélyre van szükség ALTER .
Stretch Database letiltása egy táblához
Ha letiltja a Stretchet egy táblához, két lehetősége van az Azure-ba már áttelepített távoli adatokra. További információ: Stretch Database letiltása és távoli adatok visszahozása.
Ha le szeretné tiltani a Stretchet egy táblához, és vissza szeretné másolni a táblázat távoli adatait az Azure-ból az SQL Serverre, futtassa a következő parancsot. Ez a parancs nem szakítható meg.
ALTER TABLE <table_name> SET ( REMOTE_DATA_ARCHIVE ( MIGRATION_STATE = INBOUND ) ) ;
Ez a művelet adatátviteli költségekkel jár, és nem szakítható meg. További információ: Adatátvitel díjszabásának részletei.
Miután az összes távoli adatot visszamásolta az Azure-ból az SQL Serverre, a Stretch le van tiltva a táblához.
Ha le szeretné tiltani a Stretchet egy táblához, és fel szeretné hagyni a távoli adatokat, futtassa a következő parancsot.
ALTER TABLE <table_name> SET ( REMOTE_DATA_ARCHIVE = OFF_WITHOUT_DATA_RECOVERY ( MIGRATION_STATE = PAUSED ) ) ;
Miután letiltotta a Stretch Database-t egy táblához, az adatmigrálás leáll, és a lekérdezési eredmények már nem tartalmazzák a távoli táblából származó eredményeket.
A Stretch letiltása nem távolítja el a távoli táblát. Ha törölni szeretné a távoli táblát, az Azure Portal használatával elvetheti.
[ FILTER_PREDICATE = { null | predikátum } ]
A következőkre vonatkozik: SQL Server 2017 (14.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 A migrálandó sorok kijelölése szűrőfüggvény használatával – Stretch Database.
Important
Ha olyan szűrő predikátumot ad meg, amely rosszul teljesít, az adatmigrálás is rosszul teljesít. A Stretch Database az operátorral alkalmazza a szűrő predikátumát a CROSS APPLY 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 meg kell adnia MIGRATION_STATEazt is.
MIGRATION_STATE = { KIMENŐ | BEJÖVŐ | SZÜNETELTETVE }
A következőkre vonatkozik: SQL Server 2017 (14.x) és újabb verziók.
Adja meg
OUTBOUND, hogy adatokat migráljon az SQL Serverről az Azure-ba.Adja meg
INBOUND, hogy a tábla távoli adatait az Azure-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 Database.
WAIT_AT_LOW_PRIORITY
A következőkre vonatkozik: AZ SQL Server 2014 (12.x) és újabb verziói, valamint az Azure SQL Database.
Az online indexek újraépítésének várnia kell a tábla műveleteinek blokkolására.
WAIT_AT_LOW_PRIORITY azt jelzi, hogy az online index-újraépítési művelet alacsony prioritású zárolásokra vár, így más műveletek is folytathatóak, amíg az online index buildelési művelete várakozik. A lehetőség kihagyása WAIT AT LOW PRIORITY ugyanaz, mint WAIT_AT_LOW_PRIORITY ( MAX_DURATION = 0 minutes, ABORT_AFTER_WAIT = NONE)a .
MAX_DURATION = idő [ PERC ]
A következőkre vonatkozik: AZ SQL Server 2014 (12.x) és újabb verziói, valamint az Azure SQL Database.
A percekben megadott egész számérték, a várakozási idő, amelyet az SWITCH online index újraépítése alacsony prioritással zár le a DDL-parancs futtatásakor. Ha a művelet egyelőre MAX_DURATION le van tiltva, az ABORT_AFTER_WAIT egyik művelet lefut.
MAX_DURATION az idő mindig percekben van, és kihagyhatja a szót MINUTES.
ABORT_AFTER_WAIT = { NONE | SELF | BLOKKOLÓK }
A következőkre vonatkozik: AZ SQL Server 2014 (12.x) és újabb verziói, valamint az Azure SQL Database.
NONE
Folytassa a várakozást a normál (normál) prioritású zárolásra.
SELF
Lépjen ki az
SWITCHaktuálisan futtatott vagy online index-újraépítési DDL-műveletből művelet nélkül.BLOCKERS
Tiltsa le az összes olyan felhasználói tranzakciót, amely jelenleg blokkolja a DDL-műveletet vagy az
SWITCHonline index újraépítését, hogy a művelet folytatható legyen.Engedélyre van szükség
ALTER ANY CONNECTION.
HA LÉTEZIK
A következőkre vonatkozik: AZ SQL Server 2016 (13.x) és újabb verziói, valamint az Azure SQL Database.
Feltételesen csak akkor dobja el az oszlopot vagy a kényszert, ha már létezik.
RESUMABLE = { ON | KI}
A következőkre vonatkozik: SQL Server 2022 (16.x) és újabb verziók.
Megadja, hogy egy ALTER TABLE ADD CONSTRAINT művelet folytatható-e. Ha ON, a táblamegkötés hozzáadása művelet ismét végrehajtható. A táblamegkötési művelet hozzáadása nem folytatható OFF. Az alapértelmezett érték OFF. A RESUMABLE lehetőség az ALTER TABLE index_option részeként használható az ALTER TABLE table_constraint.
MAX_DURATIONha a (kötelezőRESUMABLE = ON) funkcióval ONLINE = ON használja, az időt (a percekben megadott egész számértéket) jelzi, hogy a szüneteltetés előtt végrehajt egy újra használható online hozzáadási kényszerműveletet. Ha nincs megadva, a művelet a befejezésig folytatódik.
Az újra felhasználható ALTER TABLE ADD CONSTRAINT műveletek engedélyezésével és használatával kapcsolatos további információkért lásd: Újraművelhető táblamegkötések hozzáadása.
Remarks
Új adatsorok hozzáadásához használja INSERT. Adatsorok eltávolításához használja DELETE vagy TRUNCATE TABLE. A meglévő sorok értékeinek módosításához használja UPDATE.
Ha az eljárásgyorsítótárban vannak olyan végrehajtási tervek, amelyek hivatkoznak a táblára, megjelöli őket a ALTER TABLE következő végrehajtás során újrafordításra.
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.
Oszlop méretének módosítása
Az oszlop hosszát, pontosságát vagy skálázását az oszlop adattípusának új méretének megadásával módosíthatja. Használja a záradékot ALTER COLUMN . Ha az oszlopban adatok léteznek, az új méret nem lehet kisebb az adatok maximális méreténél. Azt is megteheti, hogy nem definiálja az oszlopot egy indexben, kivéve, ha az oszlop varchar, nvarchar vagy varbináris adattípus, és az index nem kényszer eredménye PRIMARY KEY . Lásd a Oszlopdefiníció módosításacímű rövid szakaszban látható példát.
Zárolások és ALTER TABLE
A implementálásban ALTER TABLE megadott módosítások azonnal meg lesznek határozva. Ha a módosításokhoz módosítani kell a táblázat sorait, ALTER TABLE frissítse a sorokat.
ALTER TABLE egy sémamódosítási (Sch-M) zárolást szerez be a táblán, hogy a módosítás során ne hivatkozzon más kapcsolat a táblára vonatkozó metaadatokra, kivéve azokat az online indexműveleteket, amelyek a végén rövid Sch-M zárolást igényelnek. Egy ALTER TABLE...SWITCH műveletben a zárolás a forrás- és a céltáblákon is be lesz szerezve. A tábla módosításai naplózva vannak, és teljes mértékben helyreállíthatók. A nagy táblák összes sorát érintő módosítások, például egy oszlop elvetése vagy az SQL Server egyes kiadásaiban az alapértelmezett értékkel rendelkező oszlop hozzáadása NOT NULL hosszú időt vehet igénybe, és sok naplórekordot hozhat létre. Ezeket az ALTER TABLE utasításokat ugyanúgy futtassa, mint bármely olyan INSERTutasítást UPDATE, amely DELETE sok sort érint.
A Microsoft Fabric Warehouse-ra vonatkozik.
ALTER TABLE nem lehet része explicit tranzakciónak.
Kiterjesztett események (XEvents) partíciókapcsolóhoz
A következő XEvents ALTER TABLE ... SWITCH PARTITION és online index újraépítéséhezkapcsolódik.
- lock_request_priority_state
- process_killed_by_abort_blockers
- ddl_with_wait_at_low_priority
NOT NULL oszlopok hozzáadása online műveletként
Az SQL Server 2012 (11.x) Enterprise edition és újabb verziókban az alapértelmezett értékkel rendelkező oszlop hozzáadása NOT NULL online művelet, ha az alapértelmezett érték futásidejű állandó. Ez azt jelenti, hogy a művelet szinte azonnal befejeződik a tábla sorainak száma ellenére, mivel a tábla meglévő sorai nem frissülnek a művelet során. Ehelyett az alapértelmezett érték csak a tábla metaadataiban lesz tárolva, és szükség szerint az érték keresve lesz az ilyen sorokat elérő lekérdezésekben. Ez a viselkedés automatikus. Az online művelet szintaxison túli implementálásához nincs szükség további szintaxisra ADD COLUMN . A futásidejű állandók olyan kifejezések, amelyek a determinizmus ellenére ugyanazt az értéket állítják elő futásidőben a tábla minden sorához. Az állandó kifejezés "My temporary data"vagy a rendszerfüggvény GETUTCDATETIME() például futásidejű állandó. Ezzel szemben a NEWID() vagy NEWSEQUENTIALID() függvények nem futásidejű állandók, mivel a tábla minden sorához egyedi érték jön létre. Ha olyan oszlopot NOT NULL ad hozzá, amelynek alapértelmezett értéke nem futásidejű állandó, mindig offline állapotban fut, és a művelet időtartama alatt kizárólagos (Sch-M) zárolást szerez be.
Míg a meglévő sorok a metaadatokban tárolt értékre hivatkoznak, az alapértelmezett érték a beszúrt új sorok sorában lesz tárolva, és nem ad meg másik értéket az oszlophoz. A metaadatokban tárolt alapértelmezett érték egy meglévő sorba kerül a sor frissítésekor (még akkor is, ha a tényleges oszlop nincs megadva az UPDATE utasításban), vagy ha a tábla vagy a fürtözött index újraépül.
A varchar(max), nvarchar(max), varbinary(max), xml, text, ntext, image, hierarchyid, geometry, geography vagy CLR felhasználó által definiált típusok nem vehetők fel online műveletekbe. Ha így tesz, az oszlopok nem vehetők fel online állapotba, ezért a lehetséges maximális sorméret meghaladja a 8060 bájtos korlátot. Ebben az esetben az oszlop offline műveletként lesz hozzáadva.
Párhuzamos terv végrehajtása
Az SQL Server 2012 (11.x) Enterprise edition és újabb verziókban az egyetlen ALTER TABLE ADD (indexalapú) CONSTRAINT vagy DROP (fürtözött index) CONSTRAINT utasítás futtatásához használt processzorok számát a párhuzamosság konfigurációs beállításának maximális mértéke és az aktuális számítási feladat határozza meg. Ha az adatbázismotor azt észleli, hogy a rendszer foglalt, a művelet párhuzamossági foka automatikusan csökken az utasítás végrehajtása előtt. A beállítás megadásával MAXDOP manuálisan konfigurálhatja az utasítás futtatásához használt processzorok számát. További információ: Kiszolgálókonfiguráció: a párhuzamosság maximális foka.
Particionált táblák
A particionált táblákat ALTER TABLE tartalmazó SWITCH-műveletek végrehajtása mellett a particionált táblák oszlopainak, kényszereinek és eseményindítóinak állapotát ugyanúgy módosíthatja, mint a nem particionált táblák esetében. Ez az utasítás azonban nem használható a tábla particionálási módjának módosítására. Particionált tábla újraparticionálásához használja ALTER PARTITION SCHEME és ALTER PARTITION FUNCTION. Emellett nem módosíthatja a particionált táblák oszlopainak adattípusát.
A sémához kötött nézetekkel rendelkező táblák korlátozásai
A sémaalapú nézetekkel rendelkező táblákra vonatkozó utasításokra vonatkozó ALTER TABLE korlátozások megegyeznek az egyszerű indexet tartalmazó táblák módosításakor jelenleg alkalmazott korlátozásokkal. Oszlop hozzáadása engedélyezett. A sémaalapú nézetben részt vevő oszlopok eltávolítása vagy módosítása azonban nem engedélyezett. Ha az ALTER TABLE utasításhoz sémaalapú nézetben használt oszlop módosítása szükséges, sikertelen lesz, ALTER TABLE és az adatbázismotor hibaüzenetet küld. További információ a sémakötésről és az indexelt nézetekről: CREATE VIEW.
Az alaptáblák eseményindítóinak hozzáadását és eltávolítását nem befolyásolja a táblákra hivatkozó sémaalapú nézet létrehozása.
Indexek és ALTER TABLE
A kényszer részeként létrehozott indexek elvetése a kényszer elvetésekor történik. A létrehozott CREATE INDEX indexeket el kell dobni.DROP INDEX A The ALTER INDEX utasítással újraépítheti a kényszerdefiníció indexrészét; a kényszert nem kell elvetni, és újra hozzá kell adni a következővel ALTER TABLE: .
Az oszlopon alapuló összes indexet és korlátozást el kell távolítani az oszlop eltávolítása előtt.
Fürtözött indexet létrehozó kényszer törlésekor a fürtözött index levélszintjén tárolt adatsorok egy nemclustered táblában lesznek tárolva. A lehetőség megadásával MOVE TO elvetheti a fürtözött indexet, és áthelyezheti az eredményként kapott táblát egy másik fájlcsoportba vagy partíciós sémába egyetlen tranzakcióban. A MOVE TO beállítás a következő korlátozásokkal rendelkezik:
MOVE TOnem érvényes indexelt nézetekre vagy nem konklúziós indexekre.A partíciósémának vagy a fájlcsoportnak már léteznie kell.
Ha
MOVE TOnincs megadva, a tábla ugyanabban a partíciós sémában vagy fájlcsoportban található, mint a fürtözött indexhez.
Fürtözött index elvetésekor adja meg a ONLINE = ON beállítást, hogy a tranzakció ne tiltsa le a DROP INDEX mögöttes adatok és a társított nemclustered indexek lekérdezéseit és módosításait.
ONLINE = ON a következő korlátozásokkal rendelkezik:
-
ONLINE = ONnem érvényes azokra a fürtözött indexekre, amelyek szintén le vannak tiltva. A letiltott indexeket a használatávalONLINE = OFFkell elvetni. - Egyszerre csak egy indexet lehet elvetni.
-
ONLINE = ONnem érvényes az indexelt nézetekre, a nem konklúziós indexekre vagy a helyi ideiglenes táblák indexeire. -
ONLINE = ONoszlopcentrikus indexekre nem érvényes.
A fürtözött index elvetéséhez ideiglenes lemezterületre van szükség, amely megegyezik a meglévő fürtözött index méretével. Ezt a további területet a művelet befejezése után a rendszer felszabadítja.
Note
A felsorolt <drop_clustered_constraint_option> beállítások a táblák fürtözött indexeire vonatkoznak, és nem alkalmazhatók fürtözött indexekre nézeteken vagy nemclustered indexeken.
Sémamódosítások replikálása
Ha egy KÖZZÉTETT táblán fut ALTER TABLE egy SQL Server Publisherben, a módosítás alapértelmezés szerint az összes SQL Server-előfizetőre propagálja. Ez a funkció bizonyos korlátozásokkal rendelkezik. Letilthatja. További információ: Sémamódosítások a kiadványadatbázisokon.
Adattömörítés
A rendszertáblák tömörítése nem engedélyezhető. Ha a táblázat halom, a mód újraépítési ONLINE művelete egyetlen szálon történik. Többszálas halom újraépítési művelethez használható OFFLINE mód. További információ az adattömörítésről: Adattömörítés.
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 rendszer által tárolt eljárást.
A particionált táblákra a következő korlátozások vonatkoznak:
- Egyetlen partíció tömörítési beállítását nem módosíthatja, ha a tábla nem számított indexeket tartalmaz.
- A
ALTER TABLE <table> REBUILD PARTITION... szintaxis újraépíti a megadott partíciót. - A
ALTER TABLE <table> REBUILD WITH... szintaxis újraépíti az összes partíciót.
Ntext oszlopok elvetése
Ha az elavult ntext adattípussal elveti az oszlopokat, a törölt adatok törlése szerializált műveletként történik az összes sorban. A törlés nagy időt igényelhet. Ha egy sok sort tartalmazó táblában egy ntext oszlopot helyez el, először frissítse az ntext oszlopot értékre NULL , majd dobja el az oszlopot. Ezt a lehetőséget párhuzamos műveletekkel is futtathatja, és sokkal gyorsabbá teheti.
Online index újraépítése
Az online index újraépítéséhez szükséges DDL-utasítás futtatásához egy adott táblán futó összes aktív blokkoló tranzakciót végre kell hajtani. Amikor az online index újraépítése elindul, letiltja az összes olyan új tranzakciót, amely készen áll a táblán való futtatásra. Bár az online index újraépítéséhez szükséges zárolás időtartama rövid, az adott tábla összes nyitott tranzakciójának befejezésére és az új tranzakciók elindításának blokkolására való várakozás jelentősen befolyásolhatja az átviteli sebességet. Ez a számítási feladatok lelassulását vagy időtúllépését okozhatja, és jelentősen korlátozhatja a mögöttes táblához való hozzáférést. A WAIT_AT_LOW_PRIORITY beállítás lehetővé teszi a adatbázis-kezelők számára az online index újraépítéséhez szükséges S-zárolások és Sch-M zárolások kezelését. Mindhárom esetben: NONE, SELFés BLOCKERSha a várakozási idő alatt ((MAX_DURATION = n [minutes])) nincsenek blokkoló tevékenységek, az online index újraépítése azonnal, várakozás nélkül fut, és a DDL utasítás befejeződik.
Kompatibilitási támogatás
Az ALTER TABLE utasítás csak kétrészes (schema.object) táblaneveket támogat. Az SQL Serverben a következő formátumok használatával történő táblanév megadása fordításkor meghiúsul, 117-s hibával.
server.database.schema.table.database.schema.table..schema.table
A korábbi verziókban adja meg a formátumot, server.database.schema.table 4902-s hibát adott vissza. A formátum .database.schema.table vagy a formátum ..schema.table megadása sikeres volt.
A probléma megoldásához távolítsa el a négyrészes előtag használatát.
Permissions
Engedély szükséges ALTER a táblához.
ALTER TABLE az engedélyek az utasításban részt vevő mindkét táblára ALTER TABLE SWITCH érvényesek. A átváltott adatok öröklik a céltábla biztonságát.
Ha az ALTER TABLE utasítás bármely oszlopát felhasználó által definiált általános nyelvi futtatókörnyezeti (CLR) típusnak vagy alias adattípusnak definiálta, REFERENCES a típus engedélyére van szükség.
Ha olyan oszlopot ad hozzá vagy módosít, amely frissíti a tábla sorait, engedélyre van szükség UPDATE a táblában. Ha például egy NOT NULL alapértelmezett értékkel rendelkező oszlopot ad hozzá, vagy egy identitásoszlopot ad hozzá, ha a tábla nem üres.
Examples
A cikkben szereplő kódminták a AdventureWorks2025AdventureWorksDW2025 kezdőlapjáról letölthető adatbázist vagy mintaadatbázist használják.
| Category | Kiemelt szintaxiselemek |
|---|---|
| Oszlopok és korlátozások hozzáadása |
ADD; PRIMARY KEY indexbeállításokkal, ritka oszlopokkal és oszlopkészletekkel |
| Oszlopok és korlátozások elvetése | DROP |
| Oszlopdefiníciós módosítása | adattípus módosítása; oszlopméret módosítása; egybevetés |
| Tábladefiníciós módosítása |
DATA_COMPRESSION; SWITCH PARTITION; ; LOCK ESCALATION változáskövetés |
| korlátozások és triggerek letiltása és engedélyezése |
CHECK; NO CHECK; ; ENABLE TRIGGERDISABLE TRIGGER |
| Online műveletek | ONLINE |
| Rendszer verziószámozása | SYSTEM_VERSIONING |
Oszlopok és megkötések hozzáadása
Az ebben a szakaszban szereplő példák azt mutatják be, hogy oszlopokat és korlátozásokat kell hozzáadni egy táblához.
A. Új oszlop hozzáadása
Az alábbi példa olyan oszlopot ad hozzá, amely null értékeket engedélyez, és nem tartalmaz definíción keresztül DEFAULT megadott értékeket. Az új oszlopban minden sor rendelkezik NULL.
CREATE TABLE dbo.doc_exa (column_a INT);
GO
ALTER TABLE dbo.doc_exa
ADD column_b VARCHAR (20) NULL;
GO
B. Kényszerrel rendelkező oszlop hozzáadása
Az alábbi példa egy új, UNIQUE korlátozással rendelkező oszlopot ad hozzá.
CREATE TABLE dbo.doc_exc (column_a INT);
GO
ALTER TABLE dbo.doc_exc
ADD column_b VARCHAR (20) NULL
CONSTRAINT exb_unique UNIQUE;
GO
EXECUTE sp_help doc_exc;
GO
DROP TABLE dbo.doc_exc;
GO
C. Ellenőrizetlen CHECK-korlátozás hozzáadása meglévő oszlophoz
Az alábbi példa egy korlátozást ad hozzá a tábla egy meglévő oszlopához. Az oszlop olyan értékkel rendelkezik, amely megsérti a kényszert. Ezért a WITH NOCHECK arra szolgál, hogy megakadályozza a kényszer érvényesítését a meglévő sorokon, és lehetővé tegye a kényszer hozzáadását.
CREATE TABLE dbo.doc_exd (column_a INT);
GO
INSERT INTO dbo.doc_exd VALUES (-1);
GO
ALTER TABLE dbo.doc_exd WITH NOCHECK
ADD CONSTRAINT exd_check CHECK (column_a > 1);
GO
EXECUTE sp_help doc_exd;
GO
DROP TABLE dbo.doc_exd;
GO
D. ALAPÉRTELMEZETT kényszer hozzáadása meglévő oszlophoz
Az alábbi példa létrehoz egy táblát két oszlopból, és beszúr egy értéket az első oszlopba, a másik oszlop pedig megmarad NULL. Ezután DEFAULT kényszer lesz hozzáadva a második oszlophoz. Az alapértelmezett érték alkalmazásának ellenőrzéséhez a rendszer egy másik értéket szúr be az első oszlopba, és lekérdezi a táblát.
CREATE TABLE dbo.doc_exz
(
column_a INT,
column_b INT
);
GO
INSERT INTO dbo.doc_exz (column_a) VALUES (7);
GO
ALTER TABLE dbo.doc_exz
ADD CONSTRAINT col_b_def
DEFAULT 50 FOR column_b;
GO
INSERT INTO dbo.doc_exz (column_a) VALUES (10);
GO
SELECT * FROM dbo.doc_exz;
GO
DROP TABLE dbo.doc_exz;
GO
E. Több oszlop hozzáadása korlátozásokkal
Az alábbi példa több oszlopot ad hozzá az új oszlophoz definiált korlátozásokkal. Az első új oszlop IDENTITY tulajdonságú. A táblázat minden sorában új növekményes értékek szerepelnek az identitásoszlopban.
CREATE TABLE dbo.doc_exe
(
column_a INT
CONSTRAINT column_a_un UNIQUE
);
GO
ALTER TABLE dbo.doc_exe
-- Add a PRIMARY KEY identity column.
ADD column_b INT IDENTITY
CONSTRAINT column_b_pk PRIMARY KEY,
-- Add a column that references another column in the same table.
column_c INT NULL
CONSTRAINT column_c_fk FOREIGN KEY REFERENCES doc_exe (column_a),
-- Add a column with a constraint to enforce that
-- nonnull data is in a valid telephone number format.
column_d VARCHAR (16) NULL
CONSTRAINT column_d_chk CHECK (column_d LIKE '[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]'
OR column_d LIKE '([0-9][0-9][0-9]) [0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]'),
-- Add a nonnull column with a default.
column_e DECIMAL (3, 3)
CONSTRAINT column_e_default DEFAULT .081;
GO
EXECUTE sp_help doc_exe;
GO
DROP TABLE dbo.doc_exe;
GO
F. Null értékű oszlop hozzáadása alapértelmezett értékekkel
Az alábbi példa egy DEFAULT definícióval rendelkező null értékű oszlopot ad hozzá, és a WITH VALUES használatával biztosít értékeket a tábla minden meglévő sorához. Ha WITH VALUES nincs használatban, minden sornak van értéke NULL az új oszlopban.
CREATE TABLE dbo.doc_exf (column_a INT);
GO
INSERT INTO dbo.doc_exf VALUES (1);
GO
ALTER TABLE dbo.doc_exf
ADD AddDate SMALLDATETIME
CONSTRAINT AddDateDflt DEFAULT GETDATE() WITH VALUES NULL;
GO
DROP TABLE dbo.doc_exf;
GO
G. ELSŐDLEGES KULCS korlátozásának létrehozása index- vagy adattömörítési beállításokkal
Az alábbi példa létrehozza a kényszert PRIMARY KEYPK_TransactionHistoryArchive_TransactionID , és beállítja a beállításokat FILLFACTOR, ONLINEés PAD_INDEX. Az eredményként kapott fürtözött index neve megegyezik a kényszer nevével.
A következőkre vonatkozik: SQL Server és Azure SQL Database.
USE AdventureWorks2022;
GO
ALTER TABLE Production.TransactionHistoryArchive WITH NOCHECK
ADD CONSTRAINT PK_TransactionHistoryArchive_TransactionID
PRIMARY KEY CLUSTERED (TransactionID) WITH (FILLFACTOR = 75, ONLINE = ON, PAD_INDEX = ON);
GO
Ez a hasonló példa oldaltömörítést alkalmaz a fürtözött elsődleges kulcs alkalmazása során.
USE AdventureWorks2022;
GO
ALTER TABLE Production.TransactionHistoryArchive WITH NOCHECK
ADD CONSTRAINT PK_TransactionHistoryArchive_TransactionID
PRIMARY KEY CLUSTERED (TransactionID) WITH (DATA_COMPRESSION = PAGE);
GO
H. Ritka oszlop hozzáadása
Az alábbi példák a T1 táblázat ritka oszlopainak hozzáadását és módosítását mutatják be. A tábla T1 létrehozásához szükséges kód a következő.
CREATE TABLE T1
(
C1 INT PRIMARY KEY,
C2 VARCHAR (50) SPARSE NULL,
C3 INT SPARSE NULL,
C4 INT
);
GO
Ha további ritka oszlopot szeretne hozzáadni C5, hajtsa végre a következő utasítást.
ALTER TABLE T1
ADD C5 CHAR (100) SPARSE NULL;
GO
Ha a C4 nem ritka oszlopot ritka oszlopmá szeretné alakítani, hajtsa végre az alábbi utasítást.
ALTER TABLE T1
ALTER COLUMN C4 ADD SPARSE;
GO
Ha a C4 ritka oszlopot nem elemelt oszlopmá szeretné alakítani, hajtsa végre az alábbi utasítást.
ALTER TABLE T1
ALTER COLUMN C4 DROP SPARSE;
GO
I. Oszlopkészlet hozzáadása
Az alábbi példák egy oszlop hozzáadását mutatják be a T2. Az oszlopkészletek nem vehetők fel olyan táblába, amely már tartalmaz ritka oszlopokat. A tábla T2 létrehozásához szükséges kód a következő.
CREATE TABLE T2
(
C1 INT PRIMARY KEY,
C2 VARCHAR (50) NULL,
C3 INT NULL,
C4 INT
);
GO
Az alábbi három utasítás hozzáad egy CSnevű oszlopkészletet, majd módosítsa az oszlopokat C2 és C3 a SPARSE-be.
ALTER TABLE T2
ADD CS XML COLUMN_SET FOR ALL_SPARSE_COLUMNS;
GO
ALTER TABLE T2
ALTER COLUMN C2 ADD SPARSE;
GO
ALTER TABLE T2
ALTER COLUMN C3 ADD SPARSE;
GO
J. Titkosított oszlop hozzáadása
Az alábbi utasítás egy PromotionCodenevű titkosított oszlopot ad hozzá.
ALTER TABLE Customers
ADD PromotionCode NVARCHAR (100)
ENCRYPTED WITH (
COLUMN_ENCRYPTION_KEY = MyCEK,
ENCRYPTION_TYPE = RANDOMIZED,
ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256'
);
K. Elsődleges kulcs hozzáadása ismételhető művelettel
Folytatható ALTER TABLE művelet egy 240 perces MAX_DURATION oszlopban fürtözött elsődleges kulcs hozzáadásához.
ALTER TABLE table1
ADD CONSTRAINT PK_Constrain PRIMARY KEY CLUSTERED (a)
WITH (ONLINE = ON, MAXDOP = 2, RESUMABLE = ON, MAX_DURATION = 240);
Oszlopok és korlátozások elvetése
Az ebben a szakaszban szereplő példák az oszlopok és kényszerek elvetését mutatják be.
A. Oszlop vagy oszlopok elvetése
Az első példa módosít egy táblát egy oszlop eltávolításához. A második példa több oszlopot távolít el.
CREATE TABLE dbo.doc_exb
(
column_a INT,
column_b VARCHAR (20) NULL,
column_c DATETIME,
column_d INT
);
GO
-- Remove a single column.
ALTER TABLE dbo.doc_exb DROP COLUMN column_b;
GO
-- Remove multiple columns.
ALTER TABLE dbo.doc_exb DROP COLUMN column_c, column_d;
B. Elvetési korlátozások és oszlopok
Az első példa eltávolít egy UNIQUE korlátozást egy táblából. A második példa két korlátozást és egyetlen oszlopot távolít el.
CREATE TABLE dbo.doc_exc
(
column_a INT NOT NULL
CONSTRAINT my_constraint UNIQUE
);
GO
-- Example 1. Remove a single constraint.
ALTER TABLE dbo.doc_exc DROP my_constraint;
GO
DROP TABLE dbo.doc_exc;
GO
CREATE TABLE dbo.doc_exc
(
column_a INT NOT NULL
CONSTRAINT my_constraint UNIQUE,
column_b INT NOT NULL
CONSTRAINT my_pk_constraint PRIMARY KEY
);
GO
-- Example 2. Remove two constraints and one column
-- The keyword CONSTRAINT is optional. The keyword COLUMN is required.
ALTER TABLE dbo.doc_exc
DROP CONSTRAINT my_constraint, my_pk_constraint, COLUMN column_b;
GO
C. ELSŐDLEGES KULCS kényszerének elvetése ONLINE módban
Az alábbi példa egy olyan kényszert PRIMARY KEY töröl, amelynek beállítását a ONLINE következőre állítja ON.
ALTER TABLE Production.TransactionHistoryArchive
DROP CONSTRAINT PK_TransactionHistoryArchive_TransactionID
WITH (ONLINE = ON);
GO
D. IDEGEN KULCS kényszer hozzáadása és elvetése
Az alábbi példa létrehozza a táblát ContactBackup, majd módosítja a táblát, először hozzáad egy FOREIGN KEY kényszert, amely a tábla Person.Personhivatkozik, majd elveti a FOREIGN KEY kényszert.
CREATE TABLE Person.ContactBackup (ContactID INT);
GO
ALTER TABLE Person.ContactBackup
ADD CONSTRAINT FK_ContactBackup_Contact
FOREIGN KEY (ContactID) REFERENCES Person.Person (BusinessEntityID);
GO
ALTER TABLE Person.ContactBackup
DROP CONSTRAINT FK_ContactBackup_Contact;
GO
DROP TABLE Person.ContactBackup;
Oszlopdefiníció módosítása
A. Oszlop adattípusának módosítása
Az alábbi példa egy tábla oszlopát INT-ról DECIMAL-ra módosítja.
CREATE TABLE dbo.doc_exy (column_a INT);
GO
INSERT INTO dbo.doc_exy (column_a) VALUES (10);
GO
ALTER TABLE dbo.doc_exy ALTER COLUMN column_a DECIMAL (5, 2);
GO
DROP TABLE dbo.doc_exy;
GO
B. Oszlop méretének módosítása
Az alábbi példa növeli a varchar oszlop méretét, valamint a decimális oszlop pontosságát és skáláját. Mivel az oszlopok adatokat tartalmaznak, az oszlopméret csak növelhető. Azt is megfigyelheti, hogy a col_a egy egyedi indexben van definiálva. A méret col_a továbbra is növelhető, mert az adattípus egy varchar , és az index nem kényszer eredménye PRIMARY KEY .
-- Create a two-column table with a unique index on the varchar column.
CREATE TABLE dbo.doc_exy
(
col_a VARCHAR (5) UNIQUE NOT NULL,
col_b DECIMAL (4, 2)
);
GO
INSERT INTO dbo.doc_exy VALUES ('Test', 99.99);
GO
-- Verify the current column size.
SELECT name,
TYPE_NAME(system_type_id),
max_length,
precision,
scale
FROM sys.columns
WHERE object_id = OBJECT_ID(N'dbo.doc_exy');
GO
-- Increase the size of the varchar column.
ALTER TABLE dbo.doc_exy ALTER COLUMN col_a VARCHAR (25);
GO
-- Increase the scale and precision of the decimal column.
ALTER TABLE dbo.doc_exy ALTER COLUMN col_b DECIMAL (10, 4);
GO
-- Insert a new row.
INSERT INTO dbo.doc_exy VALUES ('MyNewColumnSize', 99999.9999);
GO
-- Verify the current column size.
SELECT name,
TYPE_NAME(system_type_id),
max_length,
precision,
scale
FROM sys.columns
WHERE object_id = OBJECT_ID(N'dbo.doc_exy');
C. Oszlop rendezésének módosítása
Az alábbi példa bemutatja, hogyan módosíthatja egy oszlop rendezési módját. Először egy tábla jön létre az alapértelmezett felhasználói rendezéssel.
CREATE TABLE T3
(
C1 INT PRIMARY KEY,
C2 VARCHAR (50) NULL,
C3 INT NULL,
C4 INT
);
GO
Ezután C2 oszlop rendezése Latin1_General_BIN lesz. Az adattípus megadása kötelező, annak ellenére, hogy nem változik.
ALTER TABLE T3
ALTER COLUMN C2 VARCHAR (50) COLLATE Latin1_General_BIN;
GO
D. Oszlop titkosítása
Az alábbi példa bemutatja, hogyan titkosíthat egy oszlopot az Always Encrypted használatával biztonságos enklávékkal.
Először is a rendszer titkosított oszlopok nélkül hoz létre egy táblát.
CREATE TABLE T3
(
C1 INT PRIMARY KEY,
C2 VARCHAR (50) NULL,
C3 INT NULL,
C4 INT
);
GO
Ezután a "C2" oszlop egy CEK1nevű oszloptitkosítási kulccsal és véletlenszerű titkosítással van titkosítva. A következő állítás sikerességéhez:
- Az oszloptitkosítási kulcsnak enklávé-kompatibilisnek kell lennie. Ez azt jelenti, hogy az oszlop főkulcsával (CMK) kell titkosítva lennie, amely lehetővé teszi az enklávé számítások elvégzését.
- A cél SQL Server-példánynak biztonságos enklávékkal kell támogatnia az Always Encryptedt.
- Az utasítást biztonságos enklávékkal és támogatott ügyfélillesztővel, az Always Encryptedhez beállított kapcsolaton keresztül kell kiadni.
- A hívó alkalmazásnak hozzáféréssel kell rendelkeznie a CMK-hoz, védve.
CEK1
ALTER TABLE T3 ALTER COLUMN C2 VARCHAR (50) ENCRYPTED WITH (
COLUMN_ENCRYPTION_KEY = [CEK1],
ENCRYPTION_TYPE = RANDOMIZED,
ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256'
) NULL;
GO
Tábladefiníció módosítása
Az ebben a szakaszban szereplő példák bemutatják, hogyan módosíthatja egy tábla definícióját.
A. Táblázat módosítása a tömörítés módosításához
Az alábbi példa módosítja egy nem particionált tábla tömörítését. A halom vagy a fürtözött index újraépül. Ha a tábla halom, az összes nem rendezett index újraépül.
ALTER TABLE T1 REBUILD
WITH (DATA_COMPRESSION = PAGE);
Az alábbi példa egy particionált tábla tömörítését módosítja. A REBUILD PARTITION = 1 szintaxis csak a partíciószám 1 újraépítését okozza.
A következőkre vonatkozik: SQL Server.
ALTER TABLE PartitionTable1 REBUILD PARTITION = 1
WITH (DATA_COMPRESSION = NONE);
GO
Az alábbi alternatív szintaxist használó művelet a tábla összes partíciójának újraépítését eredményezi.
A következőkre vonatkozik: SQL Server.
ALTER TABLE PartitionTable1 REBUILD PARTITION = ALL
WITH (DATA_COMPRESSION = PAGE ON PARTITIONS (1));
További adattömörítési példákért lásd: Adattömörítés.
B. Oszlopcentrikus tábla módosítása az archiválási tömörítés módosításához
Az alábbi példa egy oszlopcentrikus táblapartíció további tömörítését egy további tömörítési algoritmus alkalmazásával végzi. Ez a tömörítés kisebb méretűre csökkenti a táblázatot, de növeli a tároláshoz és a lekéréshez szükséges időt is. Ez az archiváláshoz vagy olyan helyzetekhez hasznos, amelyek kevesebb helyet igényelnek, és több időt tudnak biztosítani a tárolásra és a lekérésre.
A következőkre vonatkozik: AZ SQL Server 2014 (12.x) és újabb verziói, valamint az Azure SQL Database.
ALTER TABLE PartitionTable1 REBUILD PARTITION = 1
WITH (DATA_COMPRESSION = COLUMNSTORE_ARCHIVE);
GO
Az alábbi példa egy lehetőséggel COLUMNSTORE_ARCHIVE tömörített oszlopcentrikus táblapartíciót bont ki. Az adatok visszaállításakor a rendszer továbbra is tömöríti azokat az oszlopcentrikus tömörítéssel, amely az összes oszlopcentrikus táblához használatos.
A következőkre vonatkozik: AZ SQL Server 2014 (12.x) és újabb verziói, valamint az Azure SQL Database.
ALTER TABLE PartitionTable1 REBUILD PARTITION = 1
WITH (DATA_COMPRESSION = COLUMNSTORE);
GO
C. Partíciók váltása táblák között
Az alábbi példa létrehoz egy particionált táblát, feltéve, hogy a partíciós séma myRangePS1 már létrejött az adatbázisban. Ezután létrejön egy nem particionált tábla ugyanazzal a struktúrával, mint a particionált tábla, és ugyanazon a fájlcsoporton, mint a PARTITION 2tábla PartitionTable. A tábla PARTITION 2PartitionTable adatai ekkor táblázatos NonPartitionTablelesznek.
CREATE TABLE PartitionTable
(
col1 INT,
col2 CHAR (10)
) ON myRangePS1 (col1);
GO
CREATE TABLE NonPartitionTable
(
col1 INT,
col2 CHAR (10)
) ON test2fg;
GO
ALTER TABLE PartitionTable SWITCH PARTITION 2 TO NonPartitionTable;
GO
D. Zárolás eszkalálásának engedélyezése particionált táblákon
Az alábbi példa lehetővé teszi a particionált táblák partíciószintre történő zárolásának eszkalálását. Ha a tábla nincs particionálva, a zárolás eszkalációja a TABLE szinten van beállítva.
A következőkre vonatkozik: SQL Server és Azure SQL Database.
ALTER TABLE dbo.T1 SET (LOCK_ESCALATION = AUTO);
GO
E. Változáskövetés konfigurálása egy táblán
Az alábbi példa lehetővé teszi a változáskövetést a Person.Person táblában.
A következőkre vonatkozik: SQL Server és Azure SQL Database.
USE AdventureWorks2022;
ALTER TABLE Person.Person ENABLE CHANGE_TRACKING;
Az alábbi példa lehetővé teszi a változáskövetést, és lehetővé teszi a módosítás során frissített oszlopok nyomon követését.
A következőkre vonatkozik: SQL Server.
USE AdventureWorks2022;
GO
ALTER TABLE Person.Person ENABLE CHANGE_TRACKING
WITH (TRACK_COLUMNS_UPDATED = ON);
Az alábbi példa letiltja a változáskövetést a Person.Person táblában.
A következőkre vonatkozik: SQL Server és Azure SQL Database.
USE AdventureWorks2022;
GO
ALTER TABLE Person.Person DISABLE CHANGE_TRACKING;
Korlátozások és eseményindítók letiltása és engedélyezése
A. Kényszer letiltása és újbóli engedélyezése
Az alábbi példa letilt egy korlátozást, amely korlátozza az adatokban elfogadott fizetéseket.
NOCHECK CONSTRAINT a ALTER TABLE használatával tiltja le a kényszert, és olyan beszúrást engedélyez, amely általában megsértené a kényszert.
CHECK CONSTRAINT újra engedélyezi a kényszert.
CREATE TABLE dbo.cnst_example
(
id INT NOT NULL,
name VARCHAR (10) NOT NULL,
salary MONEY NOT NULL
CONSTRAINT salary_cap CHECK (salary < 100000)
);
-- Valid inserts
INSERT INTO dbo.cnst_example VALUES (1, 'Joe Brown', 65000);
INSERT INTO dbo.cnst_example VALUES (2, 'Mary Smith', 75000);
-- This insert violates the constraint.
INSERT INTO dbo.cnst_example VALUES (3, 'Pat Jones', 105000);
-- Disable the constraint and try again.
ALTER TABLE dbo.cnst_example NOCHECK CONSTRAINT salary_cap;
INSERT INTO dbo.cnst_example VALUES (3, 'Pat Jones', 105000);
-- Re-enable the constraint and try another insert; this fails.
ALTER TABLE dbo.cnst_example CHECK CONSTRAINT salary_cap;
INSERT INTO dbo.cnst_example VALUES (4, 'Eric James', 110000);
B. Eseményindító letiltása és újbóli engedélyezése
Az alábbi példa a DISABLE TRIGGERALTER TABLE beállításával tiltja le az eseményindítót, és olyan beszúrást engedélyez, amely általában megsértené az eseményindítót.
ENABLE TRIGGER ezután újra engedélyezi az eseményindítót.
CREATE TABLE dbo.trig_example
(
id INT,
name VARCHAR (12),
salary MONEY
);
GO
-- Create the trigger.
CREATE TRIGGER dbo.trig1
ON dbo.trig_example
FOR INSERT
AS IF (SELECT COUNT(*)
FROM INSERTED
WHERE salary > 100000) > 0
BEGIN
PRINT 'TRIG1 Error: you attempted to insert a salary > $100,000';
ROLLBACK;
END
GO
-- Try an insert that violates the trigger.
INSERT INTO dbo.trig_example VALUES (1, 'Pat Smith', 100001);
GO
-- Disable the trigger.
ALTER TABLE dbo.trig_example DISABLE TRIGGER trig1;
GO
-- Try an insert that would typically violate the trigger.
INSERT INTO dbo.trig_example VALUES (2, 'Chuck Jones', 100001);
GO
-- Re-enable the trigger.
ALTER TABLE dbo.trig_example ENABLE TRIGGER trig1;
GO
-- Try an insert that violates the trigger.
INSERT INTO dbo.trig_example VALUES (3, 'Mary Booth', 100001);
GO
Online műveletek
A. Online index újraépítése alacsony prioritású várakozási lehetőségekkel
Az alábbi példa bemutatja, hogyan hajthat végre online index-újraépítést az alacsony prioritású várakozási beállításokat megadva.
A következőkre vonatkozik: AZ SQL Server 2014 (12.x) és újabb verziói, valamint az Azure SQL Database.
ALTER TABLE T1 REBUILD WITH (
PAD_INDEX = ON,
ONLINE = ON (
WAIT_AT_LOW_PRIORITY (MAX_DURATION = 4 MINUTES, ABORT_AFTER_WAIT = BLOCKERS)
)
);
B. Online alter rovat
Az alábbi példa bemutatja, hogyan futtathat alter column műveletet a ONLINE beállítással.
A következőkre vonatkozik: AZ SQL Server 2016 (13.x) és újabb verziói, valamint az Azure SQL Database.
CREATE TABLE dbo.doc_exy (column_a INT);
GO
INSERT INTO dbo.doc_exy (column_a) VALUES (10);
GO
ALTER TABLE dbo.doc_exy
ALTER COLUMN column_a DECIMAL (5, 2) WITH (ONLINE = ON);
GO
EXECUTE sp_help doc_exy;
DROP TABLE dbo.doc_exy;
GO
Rendszer verziószámozása
Az alábbi négy példa segítséget nyújt a rendszerverzió-használat szintaxisának megismerésében. További segítségért tekintse meg a rendszerverziós időtáblák használatának első lépéseit.
A következőkre vonatkozik: AZ SQL Server 2016 (13.x) és újabb verziói, valamint az Azure SQL Database.
A. Rendszerverziósítás hozzáadása meglévő táblákhoz
Az alábbi példa bemutatja, hogyan adhat hozzá rendszerverziósítást egy meglévő táblához, és hogyan hozhat létre jövőbeli előzménytáblát. Ez a példa feltételezi, hogy létezik egy InsurancePolicy nevű tábla, amelynek elsődleges kulcsa definiálva van. Ez a példa az újonnan létrehozott időszakoszlopokat tölti ki a rendszer verziószámozásához a kezdési és befejezési időpontok alapértelmezett értékeinek használatával, mert ezek az értékek nem lehetnek null értékűek. Ez a példa a HIDDEN záradékot használja annak biztosítására, hogy ne legyen hatása az aktuális táblával kommunikáló meglévő alkalmazásokra. Emellett azt is használja HISTORY_RETENTION_PERIOD , amely csak az SQL Database-en érhető el.
--Alter non-temporal table to define periods for system versioning
ALTER TABLE InsurancePolicy
ADD ValidFrom DATETIME2 GENERATED ALWAYS AS ROW START HIDDEN
DEFAULT SYSUTCDATETIME() NOT NULL,
ValidTo DATETIME2 GENERATED ALWAYS AS ROW END HIDDEN
DEFAULT CONVERT (DATETIME2, '9999-12-31 23:59:59.99999999') NOT NULL,
PERIOD FOR SYSTEM_TIME (ValidFrom, ValidTo);
--Enable system versioning with 1 year retention for historical data
ALTER TABLE InsurancePolicy SET (
SYSTEM_VERSIONING = ON (
HISTORY_RETENTION_PERIOD=1 YEAR
)
);
B. Meglévő megoldás migrálása a rendszer verziószámozásának használatára
Az alábbi példa bemutatja, hogyan migrálható a rendszer verziószámozására egy olyan megoldásból, amely eseményindítókat használ az időbeli támogatás utánzásához. A példa azt feltételezi, hogy van egy meglévő megoldás, amely egy táblát ProjectTask és egy táblát ProjectTaskHistory használ a meglévő megoldásához, amely az Changed Date időszakokhoz tartozó oszlopokat és Revised Date oszlopokat használja, hogy ezek az időszakoszlopok nem a datetime2 adattípust használják, és hogy a ProjectTask táblában van meghatározva egy elsődleges kulcs.
-- Drop existing trigger
DROP TRIGGER ProjectTask_HistoryTrigger;
-- Adjust the schema for current and history table
-- Change data types for existing period columns
ALTER TABLE ProjectTask ALTER COLUMN [Changed Date] DATETIME2 NOT NULL;
ALTER TABLE ProjectTask ALTER COLUMN [Revised Date] DATETIME2 NOT NULL;
ALTER TABLE ProjectTaskHistory ALTER COLUMN [Changed Date] DATETIME2 NOT NULL;
ALTER TABLE ProjectTaskHistory ALTER COLUMN [Revised Date] DATETIME2 NOT NULL;
-- Add SYSTEM_TIME period and set system versioning with linking two existing tables
-- (a certain set of data checks happen in the background)
ALTER TABLE ProjectTask
ADD PERIOD FOR SYSTEM_TIME ([Changed Date], [Revised Date]);
ALTER TABLE ProjectTask SET (
SYSTEM_VERSIONING = ON (
HISTORY_TABLE=dbo.ProjectTaskHistory, DATA_CONSISTENCY_CHECK=ON
)
);
C. A táblaséma módosításához tiltsa le és engedélyezze újra a rendszer verziószámozását
Ez a példa bemutatja, hogyan tilthatja le a rendszer verziószámozását a Department táblában, hogyan adhat hozzá oszlopot, és hogyan engedélyezheti újra a rendszer verziószámozását. A táblaséma módosításához a rendszer verziószámozásának letiltása szükséges. Végezze el ezeket a lépéseket egy tranzakción belül, hogy megakadályozza mindkét tábla frissítését a táblaséma frissítésekor, ami lehetővé teszi a DBA számára, hogy kihagyja az adatkonzisztencia-ellenőrzést a rendszerverziósítás újbóli engedélyezésekor, és teljesítménybeli előnyökhöz jusson. Az olyan feladatok, mint például a statisztikák létrehozása, a partíciók váltása vagy a tömörítés alkalmazása egy vagy mindkét táblára nem igénylik a rendszer verziószámozásának letiltását.
BEGIN TRAN
/* Takes schema lock on both tables */
ALTER TABLE Department
SET (SYSTEM_VERSIONING = OFF) ;
/* expand table schema for temporal table */
ALTER TABLE Department
ADD Col5 int NOT NULL DEFAULT 0 ;
/* Expand table schema for history table */
ALTER TABLE DepartmentHistory
ADD Col5 int NOT NULL DEFAULT 0 ;
/* Re-establish versioning again*/
ALTER TABLE Department
SET (SYSTEM_VERSIONING = ON (HISTORY_TABLE=dbo.DepartmentHistory,
DATA_CONSISTENCY_CHECK = OFF)) ;
COMMIT
D. A rendszer verziószámozásának eltávolítása
Ez a példa bemutatja, hogyan távolíthatja el teljesen a rendszer verziószámozását a Részleg táblából, és hogyan távolíthatja el a DepartmentHistory táblát. Szükség esetén érdemes lehet elvetni a rendszer által a rendszer verziószámozási adatainak rögzítéséhez használt időszakoszlopokat is. A Department és a DepartmentHistory táblákat nem helyezheti el, amíg a rendszer verziószámozása engedélyezve van.
ALTER TABLE Department
SET (SYSTEM_VERSIONING = OFF);
ALTER TABLE Department
DROP PERIOD FOR SYSTEM_TIME;
DROP TABLE DepartmentHistory;
Példák: Azure Synapse Analytics and Analytics Platform System (PDW)
Az alábbi A–C példák az FactResellerSales adatbázis táblázatát használják.
A. Tábla particionálásának meghatározása
Az alábbi lekérdezés egy vagy több sort ad vissza, ha a tábla FactResellerSales particionált. Ha a tábla nincs particionálva, a rendszer nem ad vissza sorokat.
SELECT *
FROM sys.partitions AS p
INNER JOIN sys.tables AS t
ON p.object_id = t.object_id
WHERE p.partition_id IS NOT NULL
AND t.name = 'FactResellerSales';
B. Particionált tábla határértékeinek meghatározása
Az alábbi lekérdezés a FactResellerSales tábla egyes partícióinak határértékeit adja vissza.
SELECT t.name AS TableName,
i.name AS IndexName,
p.partition_number,
p.partition_id,
i.data_space_id,
f.function_id,
f.type_desc,
r.boundary_id,
r.value AS BoundaryValue
FROM sys.tables AS t
INNER JOIN sys.indexes AS i
ON t.object_id = i.object_id
INNER JOIN sys.partitions AS p
ON i.object_id = p.object_id
AND i.index_id = p.index_id
INNER JOIN sys.partition_schemes AS s
ON i.data_space_id = s.data_space_id
INNER JOIN sys.partition_functions AS f
ON s.function_id = f.function_id
LEFT OUTER JOIN sys.partition_range_values AS r
ON f.function_id = r.function_id
AND r.boundary_id = p.partition_number
WHERE t.name = 'FactResellerSales'
AND i.type <= 1
ORDER BY p.partition_number;
C. Particionált tábla partícióoszlopának meghatározása
Az alábbi lekérdezés a tábla particionálási oszlopának FactResellerSales nevét adja vissza.
SELECT t.object_id AS Object_ID,
t.name AS TableName,
ic.column_id AS PartitioningColumnID,
c.name AS PartitioningColumnName
FROM sys.tables AS t
INNER JOIN sys.indexes AS i
ON t.object_id = i.object_id
INNER JOIN sys.columns AS c
ON t.object_id = c.object_id
INNER JOIN sys.partition_schemes AS ps
ON ps.data_space_id = i.data_space_id
INNER JOIN sys.index_columns AS ic
ON ic.object_id = i.object_id
AND ic.index_id = i.index_id
AND ic.partition_ordinal > 0
WHERE t.name = 'FactResellerSales'
AND i.type <= 1
AND c.column_id = ic.column_id;
D. Két partíció egyesítése
Az alábbi példa két partíciót egyesít egy táblán.
A Customer tábla definíciója a következő:
CREATE TABLE Customer
(
id INT NOT NULL,
lastName VARCHAR (20),
orderCount INT,
orderDate DATE
)
WITH (
DISTRIBUTION = HASH(id),
PARTITION(orderCount RANGE LEFT
FOR VALUES (1, 5, 10, 25, 50, 100)
)
);
Az alábbi parancs egyesíti a 10 és a 25 partíció határát.
ALTER TABLE Customer MERGE RANGE (10);
A táblázat új DDL-címe a következő:
CREATE TABLE Customer
(
id INT NOT NULL,
lastName VARCHAR (20),
orderCount INT,
orderDate DATE
)
WITH (
DISTRIBUTION = HASH(id),
PARTITION(orderCount RANGE LEFT
FOR VALUES (1, 5, 25, 50, 100)
)
);
E. Partíció felosztása
Az alábbi példa feloszt egy partíciót egy táblán.
A Customer táblázat a következő DDL-t tartalmazza:
DROP TABLE Customer;
CREATE TABLE Customer
(
id INT NOT NULL,
lastName VARCHAR (20),
orderCount INT,
orderDate DATE
)
WITH (
DISTRIBUTION = HASH(id),
PARTITION(orderCount RANGE LEFT
FOR VALUES (1, 5, 10, 25, 50, 100)
)
);
Az alábbi parancs létrehoz egy új partíciót, amelyet a 75-ös érték köt össze 50 és 100 között.
ALTER TABLE Customer SPLIT RANGE (75);
A táblázat új DDL-címe a következő:
CREATE TABLE Customer (
id INT NOT NULL,
lastName VARCHAR(20),
orderCount INT,
orderDate DATE)
WITH DISTRIBUTION = HASH(id),
PARTITION ( orderCount (RANGE LEFT
FOR VALUES (1, 5, 10, 25, 50, 75, 100))) ;
F. Partíció áthelyezése előzménytáblába a SWITCH használatával
Az alábbi példa a Orders tábla egyik partíciójában lévő adatokat a OrdersHistory tábla egyik partíciójára helyezi át.
A Orders táblázat a következő DDL-t tartalmazza:
CREATE TABLE Orders
(
id INT,
city VARCHAR (25),
lastUpdateDate DATE,
orderDate DATE
)
WITH (
DISTRIBUTION = HASH(id),
PARTITION(orderDate RANGE RIGHT
FOR VALUES ('2004-01-01', '2005-01-01', '2006-01-01', '2007-01-01')
)
);
Ebben a példában a Orders tábla a következő partíciókat tartalmazza. Minden partíció tartalmaz adatokat.
| Partition | Vannak adatai? | Határtartomány |
|---|---|---|
| 1 | Yes | OrderDate < '2004-01-01' |
| 2 | Yes | '2004-01-01' <= OrderDate < '2005-01-01' |
| 3 | Yes | '2005-01-01' <= OrderDate< '2006-01-01' |
| 4 | Yes | '2006-01-01'<= OrderDate < '2007-01-01' |
| 5 | Yes | '2007-01-01' <= OrderDate |
- 1. partíció (adatokkal rendelkezik):
OrderDate < '2004-01-01' - 2. partíció (adatokkal rendelkezik):
'2004-01-01' <= OrderDate < '2005-01-01' - 3. partíció (adatokkal rendelkezik):
'2005-01-01' <= OrderDate< '2006-01-01' - 4. partíció (adatokkal rendelkezik):
'2006-01-01'<= OrderDate < '2007-01-01' - 5. partíció (adatokkal rendelkezik):
'2007-01-01' <= OrderDate
A OrdersHistory táblázat a következő DDL-t tartalmazza, amely az Orders táblával azonos oszlopokkal és oszlopnevekkel rendelkezik. Mindkét kivonat el van osztva a id oszlopban.
CREATE TABLE OrdersHistory
(
id INT,
city VARCHAR (25),
lastUpdateDate DATE,
orderDate DATE
)
WITH (
DISTRIBUTION = HASH(id),
PARTITION(orderDate RANGE RIGHT
FOR VALUES ('2004-01-01')
)
);
Bár az oszlopoknak és az oszlopneveknek azonosnak kell lenniük, a partíció határainak nem kell megegyezniük. Ebben a példában a OrdersHistory tábla a következő két partícióval rendelkezik, és mindkét partíció üres:
- 1. partíció (nincs adat):
OrderDate < '2004-01-01' - 2. partíció (üres):
'2004-01-01' <= OrderDate
Az előző két tábla esetében az alábbi parancs az összes OrderDate < '2004-01-01' sorát áthelyezi a Orders táblából a OrdersHistory táblába.
ALTER TABLE Orders SWITCH PARTITION 1 TO OrdersHistory PARTITION 1;
Ennek eredményeképpen a Orders első partíciója üres, és a OrdersHistory első partíciója adatokat tartalmaz. A táblák a következőképpen jelennek meg:
Orders tábla
- 1. partíció (üres):
OrderDate < '2004-01-01' - 2. partíció (adatokkal rendelkezik):
'2004-01-01' <= OrderDate < '2005-01-01' - 3. partíció (adatokkal rendelkezik):
'2005-01-01' <= OrderDate< '2006-01-01' - 4. partíció (adatokkal rendelkezik):
'2006-01-01'<= OrderDate < '2007-01-01' - 5. partíció (adatokkal rendelkezik):
'2007-01-01' <= OrderDate
OrdersHistory tábla
- 1. partíció (adatokkal rendelkezik):
OrderDate < '2004-01-01' - 2. partíció (üres):
'2004-01-01' <= OrderDate
A Orders tábla megtisztításához távolítsa el az üres partíciót a partíciók 1 egyesítésével, és 2 az alábbiak szerint:
ALTER TABLE Orders MERGE RANGE ('2004-01-01');
Az egyesítés után a Orders tábla a következő partíciókkal rendelkezik:
Orders tábla
- 1. partíció (adatokkal rendelkezik):
OrderDate < '2005-01-01' - 2. partíció (adatokkal rendelkezik):
'2005-01-01' <= OrderDate< '2006-01-01' - 3. partíció (adatokkal rendelkezik):
'2006-01-01'<= OrderDate < '2007-01-01' - 4. partíció (adatokkal rendelkezik):
'2007-01-01' <= OrderDate
Tegyük fel, hogy újabb év telik el, és készen áll a 2005-ös év archiválására. A OrdersHistory táblában a 2005-ös évre vonatkozó üres partíciót az alábbi módon oszthatja fel:
ALTER TABLE OrdersHistory SPLIT RANGE ('2005-01-01');
A felosztás után a OrdersHistory tábla a következő partíciókkal rendelkezik:
OrdersHistory tábla
- 1. partíció (adatokkal rendelkezik):
OrderDate < '2004-01-01' - 2. partíció (üres):
'2004-01-01' < '2005-01-01' - 3. partíció (üres):
'2005-01-01' <= OrderDate
Kapcsolódó tartalom
- sys.tables
- sp_rename
- sp_help
- ESEMÉNYADATOK (Transact-SQL)
- CREATE TABLE (Transact-SQL)
- DROP TABLE (Transact-SQL)
- TÁBLÁZAT column_constraint (Transact-SQL)
- ALTERNATÍV TÁBLÁZAT column_definition (Transact-SQL)
- ALTER TABLE számított_oszlop_definíció (Transact-SQL)
- ALTERNATÍV TÁBLÁZAT index_option (Transact-SQL)
- AZ ALTERNATÍV TÁBLÁZAT table_constraint (Transact-SQL)