Deaktivieren von Fremdschlüsseleinschränkungen mit INSERT und UPDATE Anweisungen

Gilt für: SQL Server 2016 (13.x) und spätere VersionenAzure SQL-DatenbankAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL-Datenbank in Microsoft Fabric

Sie können eine Fremdschlüsseleinschränkung während 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 und Beschrä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.

Erlaubnisse

Erfordert die ALTER-Berechtigung für die Tabelle.

Verwenden von SQL Server Management Studio

Deaktivieren einer Fremdschlüsselbeschränkung für INSERT- und UPDATE-Anweisungen

  1. Erweitern Sie im Objekt-Explorerdie Tabelle mit der Einschränkung, und erweitern Sie dann den Ordner Schlüssel .

  2. Klicken Sie mit der rechten Maustaste auf die Einschränkung, und wählen Sie anschließend Ändernaus.

  3. Im Rasterbereich unter Table Designer wählen Sie Fremdschlüsseleinschränkung erzwingen aus und wählen Sie in der Dropdownliste Nein aus.

  4. Wählen Sie "Schließen" aus.

  5. Um die Einschränkung bei Bedarf erneut zu aktivieren, führen Sie die oben genannten Schritte in umgekehrter Reihenfolge durch. Wählen Sie Fremdschlüssel-Constraint durchsetzen und wählen Sie Ja aus der Dropdown-Liste.

  6. Um der Einschränkung zu vertrauen, indem Sie die vorhandenen Daten in der Beziehung des Fremdschlüssels überprüfen, wählen Sie Bestehende Daten bei Erstellung oder Wiederaktivierung prüfen und wählen Sie Ja aus der Dropdown-Liste. 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

Deaktivieren einer Fremdschlüsselbeschränkung für INSERT- und UPDATE-Anweisungen

  1. Stellen Sie im Objekt-Explorer eine Verbindung mit einer Datenbank-Engine-Instanz her.

  2. Klicken Sie in der Standardleiste auf Neue Abfrage.

  3. 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  
    
  4. 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  
    
  5. 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