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


Idegenkulcs-korlátozások letiltása INSERT és UPDATE utasításokkal

Vonatkozik a következőkre: SQL Server 2016 (13.x) û későbbi verziók: Azure SQL Database,Azure SQL Managed Instance,Azure Synapse AnalyticsPlatform System (PDW)SQL database in Microsoft Fabric

Az SQL Server INSERT és UPDATE tranzakciói során letilthat egy idegenkulcs-korlátozást az SQL Server Management Studio vagy a Transact-SQL használatával. Akkor használja ezt a lehetőséget, ha tudja, hogy az új adatok nem fogják megsérteni a meglévő kényszert, vagy ha a korlátozás csak az adatbázisban már szereplő adatokra vonatkozik.

Korlátozások és korlátozások

A korlátozások letiltása után az oszlop jövőbeli beszúrásai vagy frissítései nem lesznek érvényesítve a kényszerfeltételek alapján.

engedélyek

ALTER engedély szükséges az táblához.

Az SQL Server Management Studio használata

Az INSERT és AZ UPDATE utasítások idegenkulcs-korlátozásának letiltása

  1. Object Explorerablakában nyissa meg a korlátozással rendelkező táblát, majd nyissa meg a Kulcsok mappát.

  2. Kattintson a jobb gombbal a korlátozásra, és válassza a módosítása lehetőséget.

  3. Az Táblatervezőalatti rácson válassza a Idegenkulcs-korlátozás kényszerítése lehetőséget, majd a legördülő menüben válassza Nincs lehetőséget.

  4. Válassza a Bezárás lehetőséget.

  5. Ha szükség esetén újra engedélyezni szeretné a kényszert, fordítsa vissza a fenti lépéseket. Válassza a Külső kulcs kényszerének kényszerítése lehetőséget, majd válassza Igen lehetőséget a legördülő menüből.

  6. Ha meg szeretné erősíteni a kényszert az idegen kulcs kapcsolat adatainak ellenőrzésével, válassza a Meglévő adatok ellenőrzése létrehozáskor vagy újraengedélyezéskor opciót, majd válassza ki a Igen lehetőséget a legördülő menüből. Ez biztosítaná, hogy az idegenkulcs-korlátozás megbízható legyen.

  • Ha Meglévő adatok ellenőrzése létrehozáskor vagy újraengedélyezéskorNincsértékre van állítva, az idegen kulcs nem vizsgálja a meglévő adatokat, amikor újraengedélyezésre kerül. A lekérdezésoptimalizáló ezért nem tudja figyelembe venni a teljesítmény esetleges javulását. A megbízható külföldi kulcsok azért ajánlottak, mert a végrehajtási tervek egyszerűsíthetők a külső kulcs kényszerén alapuló feltételezésekkel. Ha ellenőrizni szeretné, hogy a külső kulcsok megbízhatóak-e az adatbázisban, tekintse meg a cikk későbbi részében található mintalekérdezéseket.

Használd a Transact-SQL-t

Az INSERT és AZ UPDATE utasítások idegenkulcs-korlátozásának letiltása

  1. Az Object Explorer-ben csatlakozzon az adatbázismotor egy példányához.

  2. A Standard sávon válassza Új lekérdezéslehetőséget.

  3. Másolja és illessze be a következő példát a lekérdezési ablakba, és válassza a Végrehajtáslehetőséget.

    USE AdventureWorks2022;  
    GO  
    ALTER TABLE Purchasing.PurchaseOrderHeader  
    NOCHECK CONSTRAINT FK_PurchaseOrderHeader_Employee_EmployeeID;  
    GO  
    
  4. Ha szükség esetén újra engedélyezni szeretné a kényszert, másolja és illessze be a következő példát a lekérdezési ablakba, és válassza a Végrehajtáslehetőséget.

    USE AdventureWorks2022;  
    GO  
    ALTER TABLE Purchasing.PurchaseOrderHeader  
    CHECK CONSTRAINT FK_PurchaseOrderHeader_Employee_EmployeeID;  
    GO  
    
  5. Ellenőrizze, hogy a környezet kényszere megbízható-e és engedélyezve van-e. Ha is_not_trusted = 1, akkor az idegen kulcs nem ellenőrzi a meglévő adatokat az újraengedélyezésekor vagy újbóli létrehozásakor. A lekérdezésoptimalizáló ezért nem tudja figyelembe venni a teljesítmény esetleges javulását. A megbízható külföldi kulcsok azért ajánlottak, mert a végrehajtási tervek egyszerűsíthetők a külső kulcs kényszerén alapuló feltételezésekkel. Másolja és illessze be a következő példát a lekérdezési ablakba, és válassza a Végrehajtáslehetőséget.

    SELECT o.name, fk.name, fk.is_not_trusted, fk.is_disabled
    FROM sys.foreign_keys AS fk
    INNER JOIN sys.objects AS o ON fk.parent_object_id = o.object_id
    WHERE fk.name = 'FK_PurchaseOrderHeader_Employee_EmployeeID';
    GO
    

    Az idegenkulcs-korlátozást megbízhatónak kell beállítania, ha a tábla meglévő adatai megfelelnek az idegenkulcs-korlátozásnak. Ha az idegen kulcsot megbízhatónak szeretné beállítani, az alábbi szkripttel ismét megbízhat az idegenkulcs-korlátozásban, figyelembe adva a további WITH CHECK szintaxist. Másolja és illessze be a következő példát a lekérdezési ablakba, és válassza a Végrehajtáslehetőséget.

    ALTER TABLE [Purchasing].[PurchaseOrderHeader] 
    WITH CHECK 
    CHECK CONSTRAINT FK_PurchaseOrderHeader_Employee_EmployeeID;
    GO
    

Következő lépések