Delen via


Vreemde-sleutelbeperkingen uitschakelen met INSERT- en UPDATE-instructies

van toepassing op: SQL Server 2016 (13.x) en hoger Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL-database in Microsoft Fabric

U kunt een beperking voor refererende sleutels uitschakelen tijdens INSERT- en UPDATE-transacties in SQL Server met behulp van 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.

machtigingen

Vereist ALTER-toestemming voor de tabel.

SQL Server Management Studio gebruiken

De foreign key-beperking uitschakelen voor INSERT- en UPDATE-instructies

  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. In het raster onder Tabelontwerperselecteer Bescherming van buitenlandse sleutels afdwingen en selecteer Nee uit de vervolgkeuzelijst.

  4. Selecteer Sluiten.

  5. Als u de beperking desgewenst opnieuw wilt inschakelen, moet u de bovenstaande stappen omkeren. Selecteer Vreemde sleutel beperking afdwingen en selecteer Ja in de vervolgkeuzelijst.

  6. Als u de beperking wilt vertrouwen door de bestaande gegevens in de relatie van de refererende sleutel te controleren, selecteert u Bestaande gegevens controleren bij het maken of opnieuw inschakelen van en selecteert u Ja in de vervolgkeuzelijst. Dit zorgt ervoor dat de beperking 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-beperking uitschakelen voor INSERT- en UPDATE-instructies

  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 vertrouwd 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. Vertrouwde refererende sleutels worden aanbevolen omdat ze kunnen worden gebruikt om uitvoeringsplannen te vereenvoudigen met veronderstellingen op basis van de beperking voor refererende sleutels. 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 beperking voor refererende sleutels in op vertrouwd als bestaande gegevens in de tabel voldoen aan de beperking voor refererende sleutels. 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
    

Volgende stappen