Megosztás a következőn keresztül:


ALTER TABLE table_constraint (Transact-SQL)

A következőre vonatkozik: :SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceWarehouse Microsoft Fabric SQL-adatbázis a Microsoft Fabric

A ALTER TABLE használatával adja meg a PRIMARY KEY tulajdonságait, UNIQUE, FOREIGN KEY, CHECK kényszer vagy DEFAULT definíció, amelyet ALTER TABLE (Transact-SQL) használatával ad hozzá a táblához.

Transact-SQL szintaxis konvenciók

Syntax

[ CONSTRAINT constraint_name ]   
{   
    { PRIMARY KEY | UNIQUE }   
        [ CLUSTERED | NONCLUSTERED ]   
        (column [ ASC | DESC ] [ ,...n ] )  
        [ WITH FILLFACTOR = fillfactor   
        [ WITH ( <index_option>[ , ...n ] ) ]  
        [ ON { partition_scheme_name ( partition_column_name ... )  
          | filegroup | "default" } ]   
    | FOREIGN KEY   
        ( column [ ,...n ] )  
        REFERENCES referenced_table_name [ ( ref_column [ ,...n ] ) ]   
        [ ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]   
        [ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]   
        [ NOT FOR REPLICATION ]   
    | CONNECTION
        ( { node_table TO node_table } 
          [ , {node_table TO node_table }]
          [ , ...n ]
        )
        [ ON DELETE { NO ACTION | CASCADE } ]
    | DEFAULT constant_expression FOR column [ WITH VALUES ]   
    | CHECK [ NOT FOR REPLICATION ] ( logical_expression )  
}  

Arguments

CONSTRAINT

Megadja a definíció kezdetét egy PRIMARY KEY, UNIQUE, FOREIGN KEYvagy CHECK kényszer vagy egy DEFAULT.

constraint_name

A kényszer neve. A kényszerneveknek az azonosítókra vonatkozó szabályokat kell követnie, azzal a kivétellel, hogy a név nem kezdődhet számjellel (#). Ha nem adja meg constraint_name, a rendszer hozzárendel egy generált nevet a kényszerhez.

ELSŐDLEGES KULCS

Olyan kényszer, amely egy adott oszlop vagy oszlop entitásintegritását kényszeríti ki egy egyedi index használatával. Minden táblához csak egy PRIMARY KEY korlátozás hozható létre.

UNIQUE

Egy adott oszlop vagy oszlopok entitásintegritását egyedi index használatával biztosító korlátozás.

FÜRTÖZÖTT | NEMCLUSTERED

Azt adja meg, hogy a rendszer fürtözött vagy nemclustered indexet hoz létre a PRIMARY KEY korlátozáshoz.UNIQUE PRIMARY KEY a kényszerek alapértelmezés szerint a következőre: CLUSTERED. UNIQUE a kényszerek alapértelmezés szerint a következőre: NONCLUSTERED.

Ha már létezik fürtözött korlátozás vagy index egy táblán, nem adhatja meg CLUSTERED. Ha már létezik fürtözött korlátozás vagy index egy táblán, PRIMARY KEY a kényszerek alapértelmezés szerint a következőre lesznek bekapcsolva NONCLUSTERED: .

Nem adhatja meg az ntext, szöveg, varchar(max), nvarchar(max), varbinary(max), xml vagy kép adattípusú oszlopokat indexoszlopként.

oszlop

Egy új kényszerben használt zárójelben megadott oszlop vagy oszlopok listája.

[ ASC | LEÍRÁS ]

A táblakorlátozásokban részt vevő oszlop vagy oszlopok rendezésének sorrendjét adja meg. Az alapértelmezett sorrend növekvő (ASC).

FILLFACTOR = fillfactor

Meghatározza, hogy a Database Engine milyen mértékben kell az indexadatok tárolására használni az egyes indexlapokat. A felhasználó által megadott fillfactor értékek 1 és 100 között lehetnek. Ha nem ad meg értéket, az alapértelmezett érték a következő 0.

A visszamenőleges kompatibilitás érdekében ez a dokumentáció tartalmazza WITH FILLFACTOR = <fillfactor> az egyetlen indexbeállítást, amely vonatkozik vagy UNIQUE korlátozásokat tartalmazPRIMARY KEY. Ez a szintaxis nem lesz dokumentálva a jövőbeli kiadásokban. A > index_option záradékában egyéb indexbeállításokat is megadhat.

ON { partition_scheme_name(partition_column_name) | filegroup| "default" }

A: SQL Server 2008 (10.0.x) és újabb verziókra vonatkozik.

A korlátozáshoz létrehozott index tárolási helyét adja meg. Ha partition_scheme_name ad meg, az index particionálva lesz, és a partíciók a partition_scheme_name által megadott fájlcsoportokhoz vannak leképezve. Ha fájlcsoportot ad meg, az index a nevesített fájlcsoportban jön létre. Ha az "alapértelmezett" értéket adja meg, vagy egyáltalán nem adja meg ON , az index ugyanabban a fájlcsoportban jön létre, mint a tábla. Ha megadhatja ON , hogy mikor ad hozzá fürtözött indexet egy PRIMARY KEY vagy UNIQUE egy korlátozáshoz, a rendszer a fürtözött index létrehozásakor a teljes táblát a megadott fájlcsoportba helyezi át.

Ebben a kontextusban az alapértelmezett érték nem kulcsszó; ez az alapértelmezett fájlcsoport azonosítója, és el kell tagoltnak lennie, mint az ON"alapértelmezett" vagy ONaz [alapértelmezett]. Ha az "alapértelmezett" értéket adja meg, a QUOTED_IDENTIFIER beállításnak az aktuális munkamenethez kell lennie ON . Ez az alapértelmezett beállítás.

KÜLFÖLDI KULCSHIVATKOZÁSOK

Olyan korlátozás, amely hivatkozási integritást biztosít az oszlopban lévő adatokhoz. FOREIGN KEY A korlátozások megkövetelik, hogy az oszlop minden értéke szerepel a hivatkozott tábla megadott oszlopában.

referenced_table_name

A kényszer által FOREIGN KEY hivatkozott tábla.

ref_column

Az új FOREIGN KEY korlátozás által hivatkozott zárójelek oszlopa vagy oszloplistája.

ON DELETE { NO ACTION | CASCADE | NULL ÉRTÉK BEÁLLÍTÁSA | ALAPÉRTELMEZETT BEÁLLÍTÁS }

Megadja, hogy mi történik a módosítandó tábla soraival, ha ezek a sorok hivatkozási kapcsolatban állnak, és törli a hivatkozott sort a szülőtáblából. Az alapértelmezett érték a NO ACTION.

NINCS AKCIÓ

A SQL Server adatbázismotor hibát jelez, és visszaállítja a törlési műveletet a szülőtábla sorában.

CASCADE

Törli a megfelelő sorokat a hivatkozó táblából, ha a szülőtáblából törli a sort.

NULL BEÁLLÍTÁS

Beállítja az idegen kulcsot NULL alkotó összes értéket a szülőtábla megfelelő sorának törlésekor. A kényszer végrehajtásához az idegen kulcs oszlopainak null értékűnek kell lenniük.

ÁLLÍTSD BE AZ ALAPÉRTELMEZETT BEÁLLÍTÁST

A szülőtábla megfelelő sorának törlésekor az idegen kulcsot alkotó összes értéket az alapértelmezett értékekre állítja. A kényszer végrehajtásához az összes idegenkulcs-oszlopnak alapértelmezett definíciókkal kell rendelkeznie. Ha egy oszlop null értékű, és nincs megadva explicit alapértelmezett érték, NULL akkor az oszlop implicit alapértelmezett értéke lesz.

Ne adja meg CASCADE , hogy a tábla szerepel-e logikai rekordokat használó egyesítési kiadványban. További információ a logikai rekordokról: Kapcsolódó sorok módosításainak csoportosítása logikai rekordokkal.

Nem határozhatja meg ON DELETE CASCADE , hogy egy INSTEAD OF eseményindító ON DELETE már létezik-e a módosított táblában.

Az AdventureWorks2025 adatbázisban például a ProductVendor tábla hivatkozási kapcsolatban áll a Vendor táblával. A ProductVendor.VendorID idegen kulcs az Vendor.VendorID elsődleges kulcsra hivatkozik.

Ha egy DELETE utasítást hajt végre a Vendor tábla egyik sorában, és ON DELETE CASCADE műveletet ad meg a ProductVendor.VendorID számára, a Database Engine a ProductVendor tábla egy vagy több függő sorát ellenőrzi. Ha van ilyen, a tábla függő sorait ProductVendor a tábla hivatkozási Vendor során kívül a rendszer törli.

Ezzel szemben, ha NO ACTION ad meg, a Database Engine hibát jelez, és visszaállítja a törlési műveletet a Vendor sorban, ha a ProductVendor táblában legalább egy sor hivatkozik rá.

FRISSÍTÉSEN { NINCS MŰVELET | CASCADE | NULL ÉRTÉK BEÁLLÍTÁSA | ALAPÉRTELMEZETT BEÁLLÍTÁS }

Megadja, hogy mi történik a táblázat azon soraiban, amelyeket módosít, ha ezek a sorok hivatkozási kapcsolatban állnak, és frissíti a hivatkozott sort a szülőtáblában. Az alapértelmezett érték a NO ACTION.

NINCS AKCIÓ

A Database Engine hibát jelez, és a szülőtábla sorának frissítési művelete vissza lesz állítva.

CASCADE

A megfelelő sorok frissülnek a hivatkozó táblában, amikor az adott sor frissül a szülőtáblában.

NULL BEÁLLÍTÁS

Beállítja az idegen kulcsot NULL alkotó összes értéket a szülőtábla megfelelő sorának frissítésekor. A kényszer végrehajtásához az idegen kulcs oszlopainak null értékűnek kell lenniük.

ÁLLÍTSD BE AZ ALAPÉRTELMEZETT BEÁLLÍTÁST

Az idegen kulcsot alkotó összes érték az alapértelmezett értékre van állítva a szülőtábla megfelelő sorának frissítésekor. A kényszer végrehajtásához az összes idegenkulcs-oszlopnak alapértelmezett definíciókkal kell rendelkeznie. Ha egy oszlop null értékű, és nincs megadva explicit alapértelmezett érték, NULL akkor az oszlop implicit alapértelmezett értéke lesz.

Ne adja meg CASCADE , hogy a tábla szerepel-e logikai rekordokat használó egyesítési kiadványban. További információ a logikai rekordokról: Kapcsolódó sorok módosításainak csoportosítása logikai rekordokkal.

ON UPDATE CASCADE, SET NULLvagy SET DEFAULT nem határozható meg, ha már INSTEAD OF létezik eseményindító ON UPDATE a módosított táblában.

Az AdventureWorks2025 adatbázisban például a ProductVendor tábla hivatkozási kapcsolatban áll a Vendor táblával. A ProductVendor.VendorID idegen kulcs az Vendor.VendorID elsődleges kulcsra hivatkozik.

Ha egy UPDATE utasítást hajt végre a Vendor tábla egyik sorában, és ON UPDATE CASCADE műveletet ad meg a ProductVendor.VendorID esetében, a Database Engine a ProductVendor tábla egy vagy több függő sorát ellenőrzi. Ha van ilyen, a táblázat függő sora ProductVendor frissül, valamint a táblában Vendor hivatkozott sor is.

Ezzel szemben, ha NO ACTION ad meg, a Database Engine hibát jelez, és visszaállítja a frissítési műveletet a Vendor sorban, ha a ProductVendor táblában legalább egy sor hivatkozik rá.

REPLIKÁCIÓHOZ NEM

A: SQL Server 2008 (10.0.x) és újabb verziókra vonatkozik.

Ha ezt a záradékot egy kényszerhez adja meg, a replikációs ügynökök nem kényszerítik ki a kényszert írási műveletek végrehajtásakor. Ezt a záradékot megadhatja a korlátozásokhoz és CHECK korlátozásokhozFOREIGN KEY.

CONNECTION

Megadja a csomóponttáblák párját, amelyekhez az adott peremhálózati korlátozás csatlakozhat. ON DELETE Megadja, hogy mi történik az éltáblában lévő sorokkal, amikor a rendszer törli azokat a csomópontokat, amelyekhez az él csatlakozik.

DEFAULT

Az oszlop alapértelmezett értékét adja meg. Definíciók használatával DEFAULT adjon meg értékeket egy új oszlophoz a meglévő adatsorokban. Nem adhat hozzá DEFAULT definíciókat olyan oszlopokhoz, amelyek időbélyeg-adattípussal , tulajdonságokkal IDENTITY , meglévő DEFAULT definíciókkal vagy kötött alapértelmezett beállításokkal rendelkeznek. Ha az oszlopnak van egy meglévő alapértelmezett értéke, az új alapértelmezett érték hozzáadása előtt el kell dobnia az alapértelmezett értéket. Ha egy felhasználó által definiált típusoszlop alapértelmezett értékét adja meg, a típusnak támogatnia kell a constant_expression-ról a felhasználó által definiált típusra történő implicit átalakítást. A SQL Server korábbi verzióival való kompatibilitás fenntartása érdekében kényszernevet rendelhet egy DEFAULT.

constant_expression

Az alapértelmezett oszlopértékként használt literális érték, NULLvagy rendszerfüggvény. Ha constant_expression egy Microsoft .NET-keretrendszer felhasználó által definiált típusnak definiált oszlopával együtt használja, a típus implementációjának támogatnia kell a constant_expression-ból a felhasználó által definiált típusra történő implicit átalakítást.

FOR oszlop

A táblaszintű DEFAULT definícióhoz társított oszlopot adja meg.

ÉRTÉKEKKEL

  • Ha oszlopot és kényszert DEFAULT ad hozzá, ha az oszlop null értéket engedélyez, WITH VALUES a meglévő sorok új oszlopának értékét a constant_expression megadott DEFAULT értékre állítja.

  • Ha a hozzáadott oszlop nem engedélyezi a null értéket, az oszlop értéke a meglévő sorok esetében mindig az állandó kifejezésbenDEFAULT megadott értékre van állítva.

A 2012-SQL Server és újabb verziókban ez a művelet metaadat-művelet lehet adding-not-null-columns-as-an-online-operation.

Ha akkor használja WITH VALUES , ha a kapcsolódó oszlopot sem adja hozzá, annak nincs hatása.

CHECK

Olyan kényszer, amely a tartomány integritását kényszeríti ki az oszlopokba vagy oszlopokba beírható lehetséges értékek korlátozásával.

logical_expression

Egy olyan kényszerben CHECK használt logikai kifejezés, amely visszaadja TRUE vagy FALSE. logical_expression kényszerekkel CHECK használva nem hivatkozhat másik táblára, de ugyanazon sor más oszlopaira is hivatkozhat. A kifejezés nem hivatkozhat alias-adattípusra.

Remarks

Ha hozzáad FOREIGN KEY vagy CHECK kényszereket, a rendszer az összes meglévő adatot ellenőrzi a kényszerek megsértésének ellenőrzéséhez, kivéve, ha megadja a WITH NOCHECK beállítást. Ha bármilyen szabálysértés történik, meghiúsul, ALTER TABLE és hibát ad vissza. Ha új PRIMARY KEY vagy UNIQUE kényszert ad hozzá egy meglévő oszlophoz, az oszlop vagy oszlopok adatainak egyedinek kell lenniük. Ha ismétlődő értékeket talál, ALTER TABLE sikertelen lesz. A WITH NOCHECK beállítás nincs hatással a hozzáadásra PRIMARY KEY vagy UNIQUE a korlátozásokra.

Mindegyik PRIMARY KEY és UNIQUE kényszer létrehoz egy indexet. Az indexek száma UNIQUE és PRIMARY KEY korlátozásai nem okozhatják, hogy a táblában lévő indexek száma meghaladja a 999 nemclustered indexet és 1 fürtözött indexet. Az idegenkulcs-megkötések nem hoznak létre automatikusan indexet. A lekérdezésekben azonban gyakran használ idegenkulcs-oszlopokat az illesztési feltételekben úgy, hogy az egyik tábla idegenkulcs-korlátozásában szereplő oszlopot vagy oszlopokat a másik tábla elsődleges vagy egyedi kulcsoszlopával vagy oszlopaival egyezik meg. Az idegenkulcs-oszlopok indexe lehetővé teszi, hogy a Database Engine gyorsan megtalálják a kapcsolódó adatokat az idegenkulcs-táblában.

A SQL Server 2022-ben (16.x) és újabb verziókban az újraművelt műveletek támogatják az elsődleges kulcsra és az egyedi kulcskényszerekre vonatkozó táblakorlátozások hozzáadását. 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.

A Microsoft Fabric-ben található Warehouse támogatja a ADD vagy DROPPRIMARY KEY, UNIQUE és FOREIGN_KEY oszlopkorlátokat, de csak akkor, ha megadja a NOT ENFORCED beállítást. A Microsoft Fabric raktára letilt minden más ALTER TABLE műveletet.

Examples

Példák: ALTER TABLE (Transact-SQL).