Foreign key-beperkingen uitschakelen met de instructies INSERT en UPDATE

Van toepassing op: SQL Server 2016 (13.x) en latere versies Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsSQL database in Microsoft Fabric

U kunt een foreign key-beperking uitschakelen tijdens INSERT- en UPDATE-transacties in SQL Server met SQL Server Management Studio of Transact-SQL. Gebruik deze optie als u weet dat nieuwe gegevens de bestaande beperking niet schenden of als de beperking alleen van toepassing is op de gegevens die al in de database aanwezig zijn.

Beperkingen en beperkingen

Nadat u deze beperkingen hebt uitgeschakeld, worden toekomstige invoegingen of updates van de kolom niet gevalideerd op basis van de beperkingsvoorwaarden.

Permissions

Vereist ALTER-toestemming voor de tabel.

SQL Server Management Studio gebruiken

Een foreign key-constraint uitschakelen voor INSERT- en UPDATE-statements

  1. Vouw in Objectverkennerde tabel uit met de beperking en vouw vervolgens de map Sleutels uit.

  2. Klik met de rechtermuisknop op de beperking en selecteer Wijzigen.

  3. Selecteer in het raster onder Table Designer'Enforce Foreign Key Constraint' en kies nee uit de dropdownlijst.

  4. Selecteer Sluitaf.

  5. Als u de beperking desgewenst opnieuw wilt inschakelen, moet u de bovenstaande stappen omkeren. Selecteer Afdwingen van vreemde sleutelbeperking en kies Ja uit de dropdownlijst.

  6. Om de beperking te vertrouwen door de bestaande gegevens in de relatie van de vreemde sleutel te controleren, kies je Bestaande gegevens controleren bij creatie of opnieuw inschakelen en kies je Ja uit de dropdownlijst. Dit zorgt ervoor dat de restrictie voor vreemde sleutels wordt vertrouwd.

  • Als Bestaande gegevens controleren bij het maken of opnieuw inschakelen van is ingesteld op Geen, dan controleert de externe sleutel geen bestaande gegevens wanneer deze opnieuw wordt ingeschakeld. De optimalisatiefunctie voor query's kan daarom geen potentiële prestatieverbeteringen overwegen. Aanbevolen worden vertrouwde buitenlandse sleutels omdat ze kunnen worden gebruikt om uitvoeringsplannen te vereenvoudigen met aannames gebaseerd op de beperking van de buitenlandse sleutel. Als u wilt controleren of vreemde sleutels in uw database worden vertrouwd, zie een voorbeeldquery verderop in dit artikel.

Gebruik Transact-SQL

Een foreign key-constraint uitschakelen voor INSERT- en UPDATE-statements

  1. Maak in Objectverkennerverbinding met een instantie van de Database-engine.

  2. Selecteer op de standaardbalk Nieuwe query.

  3. Kopieer en plak het volgende voorbeeld in het queryvenster en selecteer uitvoeren.

    USE AdventureWorks2022;  
    GO  
    ALTER TABLE Purchasing.PurchaseOrderHeader  
    NOCHECK CONSTRAINT FK_PurchaseOrderHeader_Employee_EmployeeID;  
    GO  
    
  4. Als u de beperking desgewenst opnieuw wilt inschakelen, kopieert en plakt u het volgende voorbeeld in het queryvenster en selecteert u uitvoeren.

    USE AdventureWorks2022;  
    GO  
    ALTER TABLE Purchasing.PurchaseOrderHeader  
    CHECK CONSTRAINT FK_PurchaseOrderHeader_Employee_EmployeeID;  
    GO  
    
  5. Controleer of de beperking in uw omgeving zowel betrouwbaar als ingeschakeld is. Als is_not_trusted = 1, wordt de buitenlandse sleutel niet gecontroleerd op bestaande gegevens wanneer deze opnieuw wordt ingeschakeld of aangemaakt. De optimalisatiefunctie voor query's kan daarom geen potentiële prestatieverbeteringen overwegen. Aanbevolen worden vertrouwde buitenlandse sleutels omdat ze kunnen worden gebruikt om uitvoeringsplannen te vereenvoudigen met aannames gebaseerd op de beperking van de buitenlandse sleutel. Kopieer en plak het volgende voorbeeld in het queryvenster en selecteer uitvoeren.

    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
    

    Stel de foreign key-beperking in op vertrouwd indien de bestaande gegevens in de tabel voldoen aan deze beperking. Als u de buitenlandse sleutel wilt instellen op toevertrouwd, gebruikt u het volgende script om de beperking voor buitenlandse sleutels opnieuw te vertrouwen, waarbij u let op de aanvullende WITH CHECK-syntaxis. Kopieer en plak het volgende voorbeeld in het queryvenster en selecteer uitvoeren.

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