Deaktivieren von Fremdschlüsseleinschränkungen mit INSERT- und UPDATE-Anweisungen
Gilt für: SQL Server 2016 (13.x) und höher Azure SQL-Datenbank Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)
Sie können eine Fremdschlüsseleinschränkung während der Durchführung von INSERT- und UPDATE-Transaktionen in SQL Server mithilfe von SQL Server Management Studio oder Transact-SQL deaktivieren. Verwenden Sie diese Option, wenn Sie wissen, dass neue Daten nicht gegen die vorhandene Einschränkung verstoßen, oder wenn die Einschränkung nur für die bereits in der Datenbank vorhandenen Daten gilt.
Einschränkungen
Sobald diese Einschränkungen deaktiviert worden sind, wird die Spalte bei Einfügungen oder Updates nicht mehr bezüglich der Einschränkungsbedingungen überprüft.
Berechtigungen
Erfordert die ALTER-Berechtigung für die Tabelle.
Verwenden von SQL Server Management Studio
So deaktivieren Sie eine Fremdschlüsseleinschränkung für die Anweisungen INSERT und UPDATE
Erweitern Sie im Objekt-Explorerdie Tabelle mit der Einschränkung, und erweitern Sie dann den Ordner Schlüssel .
Klicken Sie mit der rechten Maustaste auf die Einschränkung, und wählen Sie anschließend Ändernaus.
Wählen Sie im Raster unter Tabellen-Designer die Option Fremdschlüsseleinschränkung erzwingen aus, und wählen Sie im Dropdownmenü Nein aus.
Wählen Sie Schließen aus.
Um die Einschränkung bei Bedarf erneut zu aktivieren, führen Sie die oben genannten Schritte in umgekehrter Reihenfolge durch. Wählen Sie Fremdschlüsseleinschränkung erzwingen aus, und wählen Sie dann Ja im Dropdownmenü aus.
Wenn Sie die vorhandenen Daten in der Beziehung des Fremdschlüssels überprüfen möchten, um der Einschränkung zu vertrauen, klicken Sie auf Vorhandene Daten bei Erstellung oder Reaktivierung überprüfen und wählen im Dropdownmenü die Option Ja aus. Dadurch wird sichergestellt, dass die Fremdschlüsseleinschränkung vertrauenswürdig ist.
- Wenn Vorhandene Daten bei Erstellung oder Reaktivierung überprüfen auf Nein festgelegt ist, überprüft der Fremdschlüssel keine vorhandenen Daten, wenn er erneut aktiviert wird. Der Abfrageoptimierer kann daher keine potenziellen Leistungsverbesserungen berücksichtigen. Vertrauenswürdige Fremdschlüssel sind empfehlenswert, weil sie zur Vereinfachung von Ausführungsplänen mit Annahmen verwendet werden können, die auf der Fremdschlüsseleinschränkung basieren. Weiter unten in diesem Artikel finden Sie eine Beispielabfrage, mit deren Hilfe Sie überprüfen können, ob Fremdschlüssel in Ihrer Datenbank vertrauenswürdig sind.
Verwenden von Transact-SQL
So deaktivieren Sie eine Fremdschlüsseleinschränkung für die Anweisungen INSERT und UPDATE
Stellen Sie im Objekt-Explorer eine Verbindung mit einer Datenbank-Engine-Instanz her.
Klicken Sie in der Standardleiste auf Neue Abfrage.
Kopieren Sie das folgende Beispiel in das Abfragefenster, und klicken Sie dann auf Ausführen.
USE AdventureWorks2022; GO ALTER TABLE Purchasing.PurchaseOrderHeader NOCHECK CONSTRAINT FK_PurchaseOrderHeader_Employee_EmployeeID; GO
Um die Einschränkung bei Bedarf erneut zu aktivieren, kopieren Sie das folgende Beispiel, fügen Sie es in das Abfragefenster ein, und wählen Sie Ausführen aus.
USE AdventureWorks2022; GO ALTER TABLE Purchasing.PurchaseOrderHeader CHECK CONSTRAINT FK_PurchaseOrderHeader_Employee_EmployeeID; GO
Stellen Sie sicher, dass die Einschränkung in Ihrer Umgebung vertrauenswürdig und aktiviert ist. Wenn
is_not_trusted
= 1, überprüft der Fremdschlüssel keine vorhandenen Daten, wenn er neu aktiviert oder neu erstellt wird. Der Abfrageoptimierer kann daher keine potenziellen Leistungsverbesserungen berücksichtigen. Vertrauenswürdige Fremdschlüssel sind empfehlenswert, weil sie zur Vereinfachung von Ausführungsplänen mit Annahmen verwendet werden können, die auf der Fremdschlüsseleinschränkung basieren. Kopieren Sie das folgende Beispiel in das Abfragefenster, und klicken Sie dann auf Ausführen.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
Sie sollten die Fremdschlüsseleinschränkung auf „vertrauenswürdig“ festlegen, wenn vorhandene Daten in der Tabelle den Fremdschlüsseleinschränkungen entsprechen. Wenn Sie den Fremdschlüssel auf „vertrauenswürdig“ festlegen möchten, verwenden Sie wieder das folgende Skript, um der Fremdschlüsseleinschränkung zu vertrauen. Beachten Sie die zusätzliche
WITH CHECK
-Syntax. Kopieren Sie das folgende Beispiel in das Abfragefenster, und klicken Sie dann auf Ausführen.ALTER TABLE [Purchasing].[PurchaseOrderHeader] WITH CHECK CHECK CONSTRAINT FK_PurchaseOrderHeader_Employee_EmployeeID; GO