Vreemde-sleutelbeperkingen uitschakelen met INSERT- en UPDATE-instructies
van toepassing op: SQL Server 2016 (13.x) en hoger
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics 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
Vouw in Objectverkennerde tabel uit met de beperking en vouw vervolgens de map Sleutels uit.
Klik met de rechtermuisknop op de beperking en selecteer Wijzigen.
In het raster onder Tabelontwerperselecteer Bescherming van buitenlandse sleutels afdwingen en selecteer Nee uit de vervolgkeuzelijst.
Selecteer Sluiten.
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.
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
Maak in Objectverkennerverbinding met een instantie van de Database-engine.
Selecteer op de standaardbalk Nieuwe query.
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
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
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