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


AZ ALTERNATÍV TÁBLÁZAT table_constraint (Transact-SQL)

Vonatkozik a következőkre:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceRaktár a Microsoft Fabric-benSQL adatbázis a Microsoft Fabric-ben

Megadja az ELSŐDLEGES KULCS, AZ EGYEDI, a KÜLFÖLDI KULCS, a CHECK kényszer vagy az ALTER TABLE használatával a táblához hozzáadott ALAPÉRTELMEZETT definíció tulajdonságait.

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
Meghatározza az ELSŐDLEGES KULCS, AZ EGYEDI, a KÜLFÖLDI KULCS vagy a CHECK kényszer vagy az ALAPÉRTELMEZETT definíciójának kezdetét.

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 constraint_name nincs megadva, a rendszer által létrehozott név lesz hozzárendelve a kényszerhez.

ELSŐDLEGES KULCS
Egy adott oszlop vagy oszlop entitásintegritását egyedi index használatával kényszerítő kényszer. Minden táblához csak egy ELSŐDLEGES KULCS kényszer hozható létre.

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

FÜRTÖZÖTT | NEMCLUSTERED
Azt adja meg, hogy a rendszer fürtözött vagy nemclustered indexet hoz létre az ELSŐDLEGES KULCS vagy AZ EGYEDI korlátozáshoz. AZ ELSŐDLEGES KULCS korlátozásai alapértelmezés szerint FÜRTÖZÖTT. AZ EGYEDI korlátozások alapértelmezés szerint NEMCLUSTERED értékre esnek.

Ha egy táblán már létezik fürtözött korlátozás vagy index, akkor a CLUSTERED nem adható meg. Ha egy táblán már létezik fürtözött kényszer vagy index, az ELSŐDLEGES KULCS megkötések alapértelmezés szerint NEMCLUSTERED értékre esnek.

Az ntext, szöveg, varchar(max), nvarchar(max), varbinary(max), xml vagy kép adattípusú oszlopok nem adhatók meg indexoszlopként.

column
Az új kényszerben használt zárójelekben megadott oszlopok 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 érték az ASC.

FILLFACTOR =fillfactor
Megadja, hogy az adatbázismotor milyen teljes mértékben tegye az indexadatok tárolására használt indexlapokat. A felhasználó által megadott fillfactor értékek 1 és 100 között lehetnek. Ha nincs megadva érték, az alapértelmezett érték 0.

Important

A FILLFACTOR = fillfactor az elsődleges kulcsra vagy egyedi korlátozásokra vonatkozó egyetlen indexbeállítás, a visszamenőleges kompatibilitás érdekében megmarad, de a jövőbeni kiadásokban nem lesz ilyen módon dokumentálva. Az ALTER TABLE index_option záradékában más indexbeállítások is megadhatók.

ON { partition_scheme_name(partition_column_name) | filegroup| "default" }
Az: 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 van megadva, az index particionálva lesz, és a partíciók a partition_scheme_name által megadott fájlcsoportokhoz vannak leképezve. Ha a fájlcsoport meg van adva, az index a nevesített fájlcsoportban jön létre. Ha az "alapértelmezett" érték van megadva, vagy ha egyáltalán nincs bekapcsolva, az index ugyanabban a fájlcsoportban jön létre, mint a tábla. Ha az ON érték akkor van megadva, ha egy ELSŐDLEGES KULCS vagy EGYEDI korlátozáshoz fürtözött indexet ad hozzá, 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 "default" vagy a ON [default]. Ha "alapértelmezett" van megadva, a QUOTED_IDENTIFIER beállításnak be kell kapcsolnia az aktuális munkamenethez. Ez az alapértelmezett beállítás.

KÜLFÖLDI KULCSHIVATKOZÁSOK
Ez egy olyan korlátozás, amely hivatkozási integritást biztosít az oszlopban lévő adatokhoz. A KÜLFÖLDI KULCS megkötések megkövetelik, hogy az oszlop minden értéke a hivatkozott tábla megadott oszlopában szerepel.

referenced_table_name
A KÜLSŐ KULCS kényszer hivatkozik a táblára.

ref_column
Az új FOREIGN KEY korlátozás által hivatkozott zárójelben lévő oszlopok vagy oszlopok listája.

ON DELETE { NO ACTION | CASCADE | NULL ÉRTÉK BEÁLLÍTÁSA | ALAPÉRTELMEZETT BEÁLLÍTÁS }
Megadja, hogy a módosított tábla sorai milyen műveletet hajtanak végre, ha ezek a sorok hivatkozási kapcsolatban állnak, és a hivatkozott sor törlődik a szülőtáblából. Az alapértelmezett művelet a NINCS MŰVELET.

NINCS AKCIÓ
Az SQL Server adatbázismotor hibát jelez, és a rendszer visszaállítja a szülőtábla sorának törlési műveletét.

CASCADE
A rendszer törli a megfelelő sorokat a hivatkozó táblából, ha az adott sor törlődik a szülőtáblából.

NULL BEÁLLÍTÁS
Az idegen kulcsot alkotó összes érték NULL értékre van állítva 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
Az idegen kulcsot alkotó összes érték az alapértelmezett értékre van állítva a szülőtábla megfelelő sorának törlésekor. A kényszer végrehajtásához az összes idegenkulcs-oszlopnak alapértelmezett definíciókkal kell rendelkeznie. Ha egy oszlop null értékű, és nincs megadva explicit alapértelmezett érték, a NULL lesz az oszlop implicit alapértelmezett értéke.

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

A DELETE CASCADE nem határozható meg, ha a módosítandó táblában már létezik a DELETE ESEMÉNYINDÍTÓ HELYETT.

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

Ha egy DELETE utasítást hajt végre a Szállító tábla egy sorában, és a ProductVendor.VendorID esetében a RENDSZER a DELETE CASCADE műveletet adja meg, az adatbázismotor egy vagy több függő sort keres a ProductVendor táblában. Ha létezik ilyen, a ProductVendor tábla függő sorai a Szállító táblában hivatkozott sor mellett törlődnek.

Ezzel szemben, ha NINCS MŰVELET megadva, az adatbázismotor hibát jelez, és visszaállítja a törlési műveletet a Szállító 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 a tábla sorai milyen műveletet hajtanak végre, amikor a sorok hivatkozási kapcsolatban állnak, és a hivatkozott sor frissül a szülőtáblában. Az alapértelmezett művelet a NINCS MŰVELET.

NINCS AKCIÓ
Az adatbázismotor hibát jelez, és a szülőtábla sorának frissítési művelete vissza lesz állítva.

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

NULL BEÁLLÍTÁS
Az idegen kulcsot alkotó összes érték NULL értékre van állítva a szülőtábla megfelelő sorának frissítésekor. A kényszer végrehajtásához az idegen kulcs oszlopainak null értékűnek kell lenniük.

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

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

A CASCADE, a SET NULL vagy a SET DEFAULT frissítése nem határozható meg, ha a módosítandó táblában már létezik az ON UPDATE eseményindító helyett.

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

Ha egy UPDATE utasítást hajt végre a Szállító tábla egy sorában, és a ProductVendor.VendorID paraméterhez egy ON UPDATE CASCADE műveletet ad meg, az adatbázismotor egy vagy több függő sort keres a ProductVendor táblában. Ha van ilyen, a ProductVendor tábla függő sora frissül, valamint a Szállító táblában hivatkozott sor is.

Ezzel szemben, ha NINCS MŰVELET megadva, az adatbázismotor hibát jelez, és visszaállítja a frissítési műveletet a Szállító sorban, ha a ProductVendor táblában legalább egy sor hivatkozik rá.

REPLIKÁCIÓHOZ NEM
Az: SQL Server 2008 (10.0.x) és újabb verziókra vonatkozik.

A FOREIGN KEY és a CHECK kényszerekhez megadható. Ha ez a záradék egy korlátozáshoz van megadva, a korlátozás nem lesz kényszerítve, amikor a replikációs ügynökök beszúrási, frissítési vagy törlési műveleteket hajtanak végre.

A KAPCSOLAT azon csomóponttáblák párját adja meg, amelyekhez az adott peremhálózati korlátozás engedélyezve van. A ON DELETE azt határozza meg, hogy mi történik az éltáblában lévő sorokkal, amikor az éltáblában lévő él(ek)en keresztül csatlakozó csomópontok törlődnek.

DEFAULT
Az oszlop alapértelmezett értékét adja meg. AZ ALAPÉRTELMEZETT definíciók a meglévő adatsorok új oszlopának értékeinek megadására használhatók. Az ALAPÉRTELMEZETT definíciók nem adhatók hozzá olyan oszlopokhoz, amelyek időbélyeg-adattípussal , IDENTITY tulajdonságkal, meglévő ALAPÉRTELMEZETT definícióval vagy kötött alapértelmezett értékvel rendelkeznek. Ha az oszlopnak van egy meglévő alapértelmezett értéke, az alapértelmezett értéket el kell dobni az új alapértelmezett érték hozzáadása előtt. Ha egy felhasználó által definiált típusoszlophoz alapértelmezett érték van megadva, a típusnak támogatnia kell a constant_expression és a felhasználó által megadott típus közötti implicit átalakítást. Az SQL Server korábbi verzióival való kompatibilitás fenntartása érdekében a korlátozás neve hozzárendelhető az ALAPÉRTELMEZETT értékhez.

constant_expression
Az alapértelmezett oszlopértékként használt literálérték, NULL vagy rendszerfüggvény. Ha a constant_expression a Microsoft .NET-keretrendszer felhasználó által definiált típusának definiált oszlopával együtt használja, a típus implementálásának támogatnia kell a constant_expression felhasználó által definiált típusra történő implicit konvertálását.

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

ÉRTÉKEKKEL
Ha oszlopOT ÉS ALAPÉRTELMEZETT korlátot ad hozzá, ha az oszlop engedélyezi a NULL ÉRTÉKEKKEL való használatát, akkor a meglévő sorok esetében az új oszlop értéke az ALAPÉRTELMEZETT constant_expression megadott értékre lesz állítva. Ha a hozzáadott oszlop nem engedélyezi a NULL ÉRTÉKET, a meglévő sorok esetében az oszlop értéke mindig az ALAPÉRTELMEZETT állandó kifejezésben megadott értékre lesz beállítva. Az SQL Server 2012-től kezdve ez lehet egy metaadat-művelet, amely nem null oszlopokat ad hozzá,as-an-online-művelet. Ha ezt akkor használja a rendszer, ha a kapcsolódó oszlopot nem is adja hozzá, akkor nincs hatása.

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

logical_expression
A CHECK kényszerben használt logikai kifejezés IGAZ vagy HAMIS értéket ad vissza. logical_expression CHECK korlátozásokkal nem hivatkozhat egy másik táblára, de hivatkozhat ugyanahhoz a táblához tartozó többi oszlopra. A kifejezés nem hivatkozhat alias-adattípusra.

Remarks

A KÜLFÖLDI KULCS vagy a CHECK megkötések hozzáadásakor a rendszer minden meglévő adatot ellenőriz a kényszerek megsértése esetén, kivéve, ha a NOCHECK beállítás van megadva. Ha bármilyen szabálysértés történik, az ALTER TABLE sikertelen lesz, és hibát ad vissza. Ha új ELSŐDLEGES KULCS vagy EGYEDI korlátozás van hozzáadva egy meglévő oszlophoz, az oszlopban vagy oszlopokban lévő adatoknak egyedinek kell lenniük. Ha ismétlődő értékek találhatók, az ALTER TABLE sikertelen lesz. A WITH NOCHECK beállításnak nincs hatása az ELSŐDLEGES KULCS vagy AZ EGYEDI megkötések hozzáadásakor.

Minden ELSŐDLEGES KULCS és EGYEDI kényszer létrehoz egy indexet. Az EGYEDI és AZ ELSŐDLEGES KULCS korlátozásainak száma nem okozhatja, hogy a táblában lévő indexek száma meghaladja a 999 nemclustered indexet és 1 fürtözött indexet. Az idegenkulcs-korlátozások nem hoznak létre automatikusan indexet. Az idegenkulcs-oszlopokat azonban gyakran használják a lekérdezések illesztési feltételeiben úgy, hogy az egyik tábla idegenkulcs-korlátozásának oszlopát vagy oszlopait a másik tábla elsődleges vagy egyedi kulcsoszlopával vagy oszlopaival egyezik meg. Az idegenkulcs-oszlopok indexe lehetővé teszi, hogy az adatbázismotor gyorsan megtalálja a kapcsolódó adatokat az idegen kulcstáblában.

Az SQL Server 2022 (16.x) újra használható műveleteket vezet be az elsődleges kulcsra és az egyedi kulcskényszerekre vonatkozó táblakorlátozások hozzáadásához. 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.

Examples

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

Következő lépések