ALTER TABLE (Transact-SQL)

A következőre vonatkozik: SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Warehouse a Microsoft FabricSQL-adatbázisban Microsoft Fabric

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.

Jótanács

A ALTER TABLE szintaxisa az Microsoft SQL Database Engine különböző verzióiban változik. A verzióválasztó legördülő listában válassza ki a megfelelő termékverziót.

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 a Transact-SQL szintaxiskonvenciók című témakörben talál.

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ó:

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 ]
}

Szintaxis Azure Synapse Analytics és párhuzamos Data Warehouse

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

A kiszolgáló nélküli SQL-készlet Azure Synapse Analytics csak external és ideiglenes táblákat támogatja.

A Fabric raktárszintaxisa

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> ::= type_name [ ( precision [ , scale ] ) ]

<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

Adatbázis_név

Annak az adatbázisnak a neve, amelyben a táblát létrehozta.

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 ha a tábla sémája nem az aktuális felhasználó tulajdonában van, explicit módon meg kell adnia az adatbázist és a sémát.

OSZLOP MÓDOSÍTÁSA

Megadja a módosítandó elnevezett oszlopot.

A módosított oszlop nem lehet:

  • Egy időbélyeggel adattípussal rendelkező oszlop.

  • A ROWGUIDCOL táblázathoz tartozó.

  • Számított vagy számított oszlopban használt oszlop.

  • Az utasítás által CREATE STATISTICS generált statisztikákban használatos. Ha el szeretné dobni ezeket a statisztikákat, futtassa a sikeres futtatás DROP STATISTICS előtt ALTER COLUMN . A lekérdezés futtatásával lekérheti egy tábla felhasználó által létrehozott statisztikáit és statisztikai oszlopait.

    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>');
    
  • Egy vagy PRIMARY KEY több [FOREIGN KEY] REFERENCES korlátozásban használatos.

  • Egy vagy CHECK több UNIQUE korlátozásban használatos. Módosíthatja azonban egy változó hosszúságú oszlop hosszát, amelyet egy vagy CHECK több UNIQUE korlátozásban használnak.

  • Alapértelmezett definícióhoz van társítva. Ha azonban nem módosítja az adattípust, módosíthatja az oszlopok hosszát, pontosságát vagy skálázását.

ALTER COLUMN a lekérdezésoptimalizáló által automatikusan generált statisztikák elvetése.

A szöveg, az ntext és a képoszlop adattípusát csak a következő módokon módosíthatja:

  • 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 karakterre vagy varcharra módosít, az hosszabb karakterek konvertálását okozhatja. További információ: CAST and CONVERT (Transact-SQL).

  • Az oszlopok pontosságának vagy méretének csökkentése adatcsokálást okozhat.
  • A particionált táblák oszlopainak adattípusa nem módosítható.
  • Az indexben szereplő oszlopok adattípusát csak akkor módosíthatja, ha az oszlop varchar, nvarchar vagy varbináris adattípus, és az új méret megegyezik vagy nagyobb a régi méretnél.
  • Az elsődleges kulcsra vonatkozó kényszerben szereplő oszlopokat nem módosíthatja a következőre NOT NULLNULL.

Always Encrypted használata esetén (biztonságos enklávék nélkül), ha módosít egy titkosított oszlopot ENCRYPTED WITH, az adattípust kompatibilis adattípusra módosíthatja (például int to bigint), de a titkosítási beállításokat nem módosíthatja.

Ha az Always Encryptedt biztonságos enklávékkal használja, 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ásokat (enklávé-kompatibilis oszlopkulcsokkal master titkosítva). További információ: Always Encrypted biztonságos enklávékkal.

Ha módosít egy oszlopot, a Database Engine 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, előfordulhat, hogy a Database Engine eléri a rekordméret korlátját. Ha ez történik, MSSQLSERVER_511 vagy 1708-at kap. A hibák elkerülése érdekében vagy újra kell építeni a fürtözött indexet a táblában, vagy csökkenteni kell az oszlopmódosítások számát.

oszlop_név

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 név akkor használatos, ha nem ad meg column_name időbélyeg adattípus-oszlophoz.

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:

  • Egy SQL Server rendszer adattípusa.
  • Egy SQL Server rendszer adattípusán alapuló alias adattípus. A tábladefiníciókban való használatuk előtt aliasadattípusokat hozhat létre az CREATE TYPE utasítással.
  • Egy .NET keretrendszer felhasználó által definiált típusa, valamint 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 TYPE utasítással.

A módosított oszlop type_name a következő feltételek vonatkoznak:

  • 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 az alapértelmezett értékek mindig be vannak kapcsolva ALTER COLUMN; ha nincs megadva, az oszlop null értékű.
  • ANSI_PADDING padding mindig ON a ALTER 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 ARITHABORT aktuális beállítást. ALTER TABLE úgy működik, mintha ARITHABORT a következőre ONvan állítva: .

Note

Ha nem adja meg a COLLATE záradékot, az oszlop adattípusának módosítása az adatbázis alapértelmezett rendezési pontjára módosítja a rendezést.

pontosság

A megadott adattípus pontossága. Az érvényes pontossági értékekkel kapcsolatos további információkért lásd: Előződés, skálázás és hossz (Transact-SQL).

méret

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: Előződés, skálázás és hossz (Transact-SQL).

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: 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 beír egy xml oszlopot egy sémagyűjteménybe, először CREATE XML SCHEMA COLLECTION (Transact-SQL) haszná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 nem ad meg rendezést, az oszlop az adatbázis alapértelmezett rendezési eleméhez lesz rendelve. A rendezés neve lehet Windows rendezési név vagy SQL-rendezés neve. A lista és további információ: Windows rendezési név (Transact-SQL) és SQL Server rendezési név (Transact-SQL).

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ési módját, használjon külön ALTER TABLE utasításokat az oszlop SQL Server rendszer adattípusra való módosításához. 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 CHECK kényszer, FOREIGN KEY a 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 (Transact-SQL).

NULL | NEM NULL

Megadja, hogy az oszlop elfogad-e null értékeket. Olyan oszlopokat adhat hozzá, amelyek nem engedélyezik a null értékeket, csak akkor, 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 meg van adva 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ítenie kell egy értékre, mielőtt engedélyezve ALTER COLUMNNOT NULL lesz, 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ázatot hoz létre vagy módosít az utasítások vagy CREATE TABLE utasítások használatával, az ALTER TABLE adatbázis- és munkamenet-beállítások befolyásolhatják és esetleg felülbírálhatják az oszlopdefinícióban megadott adattípus nullbilitását. Mindig explicit módon definiáljon egy oszlopot nem megfelelő oszlopokként NULL vagy NOT NULL 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 (Transact-SQL).

Note

Ha megadja NULL vagy NOT NULL használja ALTER COLUMN, meg kell adnia new_data_type [(pontosság [, skálázás ])]. 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: 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 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 PERSISTEDként megadott oszlopok esetében a Database Engine fizikailag tárolja a számított értékeket a táblában, és frissíti az értékeket, amikor a számított oszloptól függő egyéb oszlopok 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 (Transact-SQL).

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

Fabric SQL-adatbázisban a számított oszlopok engedélyezettek, de jelenleg nem tükrözhetők a OneLake Fabric.

NE DOBJ LE REPLIKÁCIÓHOZ

A: 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: SQL Server 2016 (13.x) és újabb verziók, valamint 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: SQL Server 2016 (13.x) és újabb verziók, valamint 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 COLUMN lehetővé teszi, hogy a felhasználó által létrehozott és az autostatisztika a művelet időtartamára hivatkozzon a módosított oszlopra, így a ALTER COLUMN lekérdezések a szokásos módon futhatnak. 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, nem hajthat végre ALTER COLUMN műveletet.

  • Amíg az online ALTER COLUMN művelet fut, az adott oszloptól függő DDL-művelet (például indexek vagy nézetek létrehozása vagy módosítása) le van tiltva, vagy megfelelő hibával meghiúsul. Ez a viselkedés garantálja, hogy a művelet futtatása közben bevezetett függőségek miatt az online ALTER COLUMN működés nem fog meghiúsulni.

  • Az oszlopok NOT NULLNULL kö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 a ALTER művelet korlátozza az oszlop pontosságát (numerikus vagy datetime).

  • A WAIT_AT_LOW_PRIORITY beállítás online nem használható ALTER COLUMN.

  • ALTER COLUMN ... ADD/DROP PERSISTED nem támogatott az online ALTER COLUMN.

  • ALTER COLUMN ... ADD/DROP ROWGUIDCOL/NOT FOR REPLICATION nem érinti az online ALTER COLUMN.

  • Az Online ALTER COLUMN nem támogatja olyan táblák módosítását, amelyekben engedélyezve van a változáskövetés, vagy amely az egyesítési replikáció közzétevője.

  • Az Online ALTER COLUMN nem támogatja a CLR-adattípusok közötti módosítást.

  • Az Online ALTER COLUMN nem támogatja az 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 ALTER COLUMN állapot nem csökkenti az oszlop módosíthatóságára vonatkozó korlátozásokat. 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 ALTER COLUMN nem támogatja egynél több oszlop egyidejű módosítását.

  • Az online ALTER COLUMN állapotnak nincs hatása a rendszer által verziózott időtáblákban. ALTER az oszlop nem online állapotban fut, függetlenül attól, hogy melyik érték lett megadva a beállításhoz ONLINE .

Az online ALTER COLUMN tartalomnak hasonló követelményei, korlátozásai és funkciói vannak, mint az online index újraépítésének, 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 COLUMN.
  • 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: Ez általában soha nem ajánlott, de bizonyos körülmények között szükség lehet rá. 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

A ALTER TABLE utasítás használata nélkül az utasítások CREATE INDEX (Transact-SQL), DROP INDEX (Transact-SQL), ALTER INDEX (Transact-SQL) és ALTER TABLE index_option (Transact-SQL) nem támogatottak a következő indexek: memóriaoptimalizált táblák.

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

A ALTER TABLE utasítás használata nélkül az utasítások CREATE INDEX (Transact-SQL), DROP INDEX (Transact-SQL), ALTER INDEX (Transact-SQL) és ALTER TABLE index_option (Transact-SQL) nem támogatottak a következő indexek: memóriaoptimalizált táblák.

SYSTEM_TIME IDŐSZAKA ( system_start_time_column_name, system_end_time_column_name )

A: SQL Server 2017 (14.x) és újabb verziók, valamint Azure SQL Database.

Megadja azoknak az oszlopoknak a nevét, amelyeket a rendszer a rekord érvényességének időtartamának rögzítésére használ. 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.

A 2017-SQL Server (14.x) alapján a felhasználók megjelölhetnek egy vagy mindkét oszlopot HIDDEN jelzővel, hogy implicit módon elrejtsék ezeket az oszlopokat, hogy SELECT * FROM <table_name> ne adjon 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

A ALTER TABLE utasítás használata nélkül az utasítások CREATE INDEX (Transact-SQL), DROP INDEX (Transact-SQL), ALTER INDEX (Transact-SQL) és ALTER TABLE index_option (Transact-SQL) nem támogatottak a következő indexek: memóriaoptimalizált táblák.

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 KEYvagy UNIQUE kényszerben PRIMARY KEYhasználatos.
  • A kulcsszóval DEFAULT definiá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 INDEX (Transact-SQL) használatával. A LOB-adattípusok elvetésének hatásáról ebben a CSS-blogbejegyzésbenolvashat.

SYSTEM_TIME IDŐSZAKA

A: SQL Server 2016 (13.x) és újabb verziók, valamint 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: 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:

  • 1

    Letiltja a párhuzamos tervgenerálást.

  • >1

    A 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 a SQL Server minden kiadásában. További információ: Editions and supported features of 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 nemclustered indexet újjáépít. ONLINE nem állítható be, ON hogy 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 SWITCH egy 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 az SWITCH ú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 SELECT utasí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 a SQL Server minden kiadásában. További információ: Editions and supported features of SQL Server 2022.

ÁTHELYEZÉS { partition_scheme_name(column_name [ ,...n ] ) | fájlcsoport | "default" }

A: 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 (Transact-SQL).

{ 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 NOCHECK beállítással, vagy engedélyezve van a CHECK beá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: 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 (Transact-SQL).

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: SQL Server és Azure SQL Database.

Azt adja meg, hogy a Database Engine a nyomon követett oszlopokat módosító sávok frissültek-e. 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: 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 a 2016-os SQL Server (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: SQL Server. Azure SQL Database nem támogatja 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 partition_scheme_name megadásakor a CREATE TABLE (Transact-SQL) szabályai érvényesek. Győződjön meg arról, hogy a tábla már particionált a soradatokhoz, és a partícióséma ugyanazt a partíciófüggvényt és oszlopokat használja, mint a FILESTREAM partíciós séma.

filestream_filegroup_name egy FILESTREAM-fájlcsoport nevét adja meg. A fájlcsoportnak egy olyan fájllal kell rendelkeznie, amely egy CREATE DATABASE vagy ALTER DATABASE (Transact-SQL) utasítással van definiálva, 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: SQL Server 2016 (13.x) és újabb verziók, valamint 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: 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őre vonatkozik: : Azure SQL Edge only

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: 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 SQL Server Database Engine 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 TABLE ré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. TABLE az 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, Database Engine 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: 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 lehetőségek teljes leírását a ALTER TABLE index_option (Transact-SQL) című témakörben talál.

DATA_COMPRESSION

A: 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: SQL Server 2014 (12.x) és újabb verziók, valamint Azure SQL Database.

    Csak oszlopcentrikus táblákra vonatkozik. COLUMNSTORE a beállítással tömörített partíció felbontását COLUMNSTORE_ARCHIVE adja 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: SQL Server 2014 (12.x) és újabb verziók, valamint Azure SQL Database.

    Csak az oszlopcentrikus táblákra vonatkozik, amelyek fürtözött oszlopcentrikus indexben tárolt táblák. COLUMNSTORE_ARCHIVE a 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 = ROW vagy PAGE nem engedélyezett a Microsoft Fabric SQL Database-ben.

XML_COMPRESSION

A: SQL Server 2022 (16.x) és újabb verziók, Azure SQL Database és Azure SQL Managed Instance.

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_wait beá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: 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: 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: SQL Server. 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: 2017-SQL Server (14.x) és újabb verziókra vonatkozik.

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 a 2022-SQL Server (16.x) és Azure SQL Database. Ez a funkció a Database Engine 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 a távoli adatokra, amelyeket már áttelepített Azure. 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 át szeretné másolni a táblázat távoli adatait Azure vissza a SQL Server, 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 Azure SQL Server, 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, a Azure portál használatával elvetheti.

[ FILTER_PREDICATE = { null | predikátum } ]

A: 2017-SQL Server (14.x) és újabb verziókra vonatkozik.

Megadhat egy szűrő predikátumot, amely kijelöli a korábbi és az aktuális adatokat tartalmazó táblából áttelepítendő sorokat. A predikátumnak egy determinisztikus beágyazott táblaértékű függvényt kell meghívnia. További információ: Stretch Database engedélyezése tábla és 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: 2017-SQL Server (14.x) és újabb verziókra vonatkozik.

WAIT_AT_LOW_PRIORITY

A: SQL Server 2014 (12.x) és újabb verziók, valamint 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: SQL Server 2014 (12.x) és újabb verziók, valamint 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: SQL Server 2014 (12.x) és újabb verziók, valamint Azure SQL Database.

  • NONE

    Folytassa a várakozást a normál (normál) prioritású zárolásra.

  • SELF

    Lépjen ki az SWITCH aktuá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 SWITCH online 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: SQL Server 2016 (13.x) és újabb verziók, valamint Azure SQL Database.

Feltételesen csak akkor dobja el az oszlopot vagy a kényszert, ha már létezik.

RESUMABLE = { ON | KI}

A: 2022-SQL Server (16.x) és újabb verziókra vonatkozik.

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 beállítás a ALTER TABLE index_option (Transact-SQL) részeként használható a ALTER TABLE table_constraint (Transact-SQL).

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 a INSERT (Transact-SQL). Adatsorok eltávolításához használja a DELETE (Transact-SQL) vagy TRUNCATE TABLE (Transact-SQL). A meglévő sorok értékeinek módosításához használja a UPDATE (Transact-SQL).

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.

Jelenleg a memóriában, a főkönyvben, a főkönyvelőzményekben és az Always Encrypted táblák nem hozhatók létre az SQL-adatbázisban a Microsoft Fabric. További információ: Limitations in SQL Database in Microsoft Fabric.

A Microsoft Fabric SQL Database-ben néhány táblafunkció létrehozható, de nem a OneLake Fabric. További információ: Limitations for Fabric SQL Database mirroring.

A Fabric Data Warehouse támogatott ALTER TABLE Transact-SQL műveletek explicit, felhasználó által meghatározott tranzakción belül hajthatók végre. További információ: Transactions in Fabric Data Warehouse.

A Fabric Data Warehouse az elosztott #temp táblákat ALTER TABLE, az MDF-alapú ideiglenes táblákat azonban nem módosíthatja. További információ: #temp táblák Fabric Data Warehouse.

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 megadott ALTER TABLE módosítások azonnal érvénybe lépnek. 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 más kapcsolatok ne hivatkozhassanak a tábla metaadataira a módosítás során, kivéve az online indexelési műveleteket, amelyek végén egy rövid Sch-M zárolásra van szükség. 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 nagyméretű táblák összes sorát érintő módosítások, például egy oszlop elvetése vagy a SQL Server egyes kiadásaiban az alapértelmezett értékkel rendelkező NOT NULL oszlop hozzáadása 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.

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

A 2012-SQL Server (11.x) Enterprise edition és újabb verziókban az alapértelmezett értékkel rendelkező NOT NULL oszlop hozzáadása online művelet, ha az alapértelmezett érték egy runtime állandó. Ez az alapértelmezett viselkedés azt jelenti, hogy a művelet a tábla sorainak száma ellenére szinte azonnal befejeződik, 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.

Online műveletben nem vehet fel varchar(max), nvarchar(max), varbinary(max), xml, text, ntext, image, hierarchyid, geometry, geography vagy CLR felhasználó által definiált oszlopokat. Ha így tesz, akkor nem vehet fel oszlopot online, ha a maximális lehetséges 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

A 2012 SQL Server-es (11.x) Enterprise edition és újabb verziókban a max degree of parallelism konfigurációs beállítás és az aktuális számítási feladat határozza meg az egyetlen ALTER TABLE ADD (indexalapú) CONSTRAINT vagy DROP (fürtözött index) CONSTRAINT utasítást futtató processzorok számát. Ha a Database Engine észleli, hogy a rendszer foglalt, automatikusan csökkenti a művelet párhuzamosságát 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ást futtató 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 tartalmazó műveletek végrehajtása SWITCH mellett a particionált táblák ALTER TABLE oszlopainak, kényszereinek és eseményindítóinak állapotát is módosíthatja, ugyanúgy, mint a nem particionált táblák esetében. Ezzel az utasítással azonban nem módosíthatja a tábla particionálásának módját. Particionált tábla újraparticionálásához használja a ALTER PARTITION SCHEME (Transact-SQL) és ALTER PARTITION FUNCTION (Transact-SQL). 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. Oszlopot is hozzáadhat. Azonban nem távolíthat el és nem módosíthat olyan oszlopokat, amelyek sémaalapú nézetben is részt vesznek. Ha a ALTER TABLE utasítás sémaalapú nézetben használt oszlop módosítását igényli, a ALTER TABLE meghiúsul, és a Database Engine hibaüzenetet ad. További információ a sémakötésről és az indexelt nézetekről: CREATE VIEW (Transact-SQL).

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 használatával CREATE INDEXlétrehozott indexek elvetéséhez használja a következőt DROP INDEX: ALTER INDEX Az utasítással újraépítheti a kényszerdefiníció részét képező indexet. Nem kell elvetnie a kényszert, és újra hozzá kell adnia a korlátozást a használatával ALTER TABLE.

Az oszlop eltávolítása előtt el kell távolítania az oszlopon alapuló összes indexet és korlátozást.

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 TO nem é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 nem adja meg MOVE TO, a tábla ugyanabban a partíciós sémában vagy fájlcsoportban található, mint amelyet a fürtözött indexhez definiáltak.

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 = ON nem érvényes azokra a fürtözött indexekre, amelyek szintén le vannak tiltva. A letiltott indexeket a következővel ONLINE = OFFkell elvetnie: .
  • Egyszerre csak egy indexet lehet elvetni.
  • ONLINE = ON nem érvényes az indexelt nézetekre, a nem konklúziós indexekre vagy a helyi ideiglenes táblák indexeire.
  • ONLINE = ON oszlopcentrikus indexekre nem érvényes.

A fürtözött indexek elvetéséhez ideiglenes lemezterület szükséges, amely megegyezik a meglévő fürtözött index méretével. Ez a művelet amint befejeződik, felszabadítja a további területet.

Note

A felsorolt <drop_clustered_constraint_option> beállítások a táblák fürtözött indexeire vonatkoznak. Ezeket a beállításokat nem alkalmazhatja a fürtözött indexekre a nézeteken vagy a nemclustered indexeken.

Sémamódosítások replikálása

Ha ALTER TABLE futtat egy SQL Server Publisher közzétett táblán, 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ábla halom, a mód újraépítési ONLINE művelete egyszálas. Többszálú halom újraépítési műveletének módja OFFLINE . 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 elveti az elavult szöveges adattípust használó 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. Amikor egy sok sort tartalmazó táblába egy ntext oszlopot csepegtet, először frissítse az ntext oszlopot értékre NULL , majd vesse 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ónak be kell fejeződnie. 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 való várakozás és az új tranzakciók elindításának blokkolása jelentősen befolyásolhatja az átviteli sebességet. Ez a zárolási várakozás 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, , és SELFha a várakozási idő alatt (BLOCKERS) 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 (MAX_DURATION = n [minutes])befejeződik.

Kompatibilitási támogatás

Az ALTER TABLE utasítás csak kétrészes (schema.object) táblaneveket támogat. A SQL Server 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 úgy határozza meg, hogy egy általános nyelvi futtatókörnyezet (CLR) felhasználó által definiált típusa vagy alias adattípusa legyen, 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 AdventureWorks2025 vagy AdventureWorksDW2025 mintaadatbázist használják, amelyet a Microsoft SQL Server Minták és közösségi projektek kezdőlapjáról tölthet le.

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ót DEFAULT . 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 példa arra használja WITH NOCHECK , hogy megakadályozza a kényszer érvényesítését a meglévő sorokon, és lehetővé teszi 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, míg a másik oszlop marad NULL. A példa ezután hozzáad egy kényszert DEFAULT a második oszlophoz. Az alapértelmezett beállítás alkalmazásának ellenőrzéséhez a példa 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 nem használja WITH VALUES, minden sornak megvan az é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: 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 azt mutatják be, hogyan adhat hozzá oszlopot a táblázathoz T2. Nem adhat hozzá oszlopkészletet olyan táblához, amely már tartalmaz ritka oszlopokat. Az alábbi kód táblázatot T2hoz létre.

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 bemutatják, hogyan lehet elvetni az oszlopokat és a korlátozásokat.

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 olyan kényszert FOREIGN KEY , amely a táblára Person.Personhivatkozik. Ezután elveti a kényszert FOREIGN KEY .

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, csak az oszlopméretet növelheti. 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 PRIMARY KEY eredménye.

-- 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 létre kell hoznia egy táblázatot 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 módosítsa az oszlop C2 rendezést a következőre Latin1_General_BIN: . Akkor is meg kell adnia az adattípust, ha az 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 biztonságos enklávékkal való használatával.

Először hozzon létre egy táblát titkosított oszlopok nélkül.

CREATE TABLE T3
(
    C1 INT PRIMARY KEY,
    C2 VARCHAR (50) NULL,
    C3 INT NULL,
    C4 INT
);
GO

Ezután az oszlop titkosítása C2 egy oszloptitkosítási kulccsal, névvel CEK1és véletlenszerű titkosítással. A következő állítás sikerességéhez:

  • Az oszloptitkosítási kulcsnak enklávé-kompatibilisnek kell lennie. Ez a követelmény azt jelenti, hogy egy olyan oszlopkulcs master (CMK) használatával kell titkosítani, amely lehetővé teszi az enklávészámítást.
  • 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: 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: 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 a tömörítés archiváláskor vagy olyan helyzetekben hasznos, amelyek kevesebb helyet igényelnek, és több időt tudnak biztosítani a tárolásra és a lekérésre.

A: SQL Server 2014 (12.x) és újabb verziók, valamint 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: SQL Server 2014 (12.x) és újabb verziók, valamint 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: 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: 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: 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: 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 Ezzel ALTER TABLE letilthatja a kényszert, és olyan beszúrást engedélyezhet, amely általában megsértené a kényszert. A kényszer újbóli engedélyezésére használható CHECK CONSTRAINT .

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 az DISABLE TRIGGER eseményindító letiltásának ALTER TABLE és egy olyan beszúrás engedélyezésének lehetőségét használja, amely általában megsértené az eseményindítót. Az eseményindító ismételt engedélyezésére használható ENABLE TRIGGER .

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: SQL Server 2014 (12.x) és újabb verziók, valamint 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: SQL Server 2016 (13.x) és újabb verziók, valamint 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: SQL Server 2016 (13.x) és újabb verziók, valamint 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 és elemzési platformrendszer (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 lekérdezés 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