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

Gilt für: SQL Server 2016 (13.x) und höher Azure SQL-DatenbankAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics 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 Sie SQL Server Management Studio

So deaktivieren Sie eine Fremdschlüsseleinschränkung für die Anweisungen INSERT und UPDATE

  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. Wählen Sie im Raster unter Tabellen-Designer die Option Fremdschlüsseleinschränkung erzwingen aus, und wählen Sie im Dropdownmenü 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üsseleinschränkung erzwingen aus, und wählen Sie dann Ja im Dropdownmenü aus.

  6. 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

  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
    

Nächste Schritte