Udostępnij za pośrednictwem


Wyłączanie ograniczeń klucza obcego za pomocą instrukcji INSERT i UPDATE

Dotyczy: SQL Server 2016 (13.x) i nowszych Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL Database w usłudze Microsoft Fabric

Ograniczenie klucza obcego można wyłączyć podczas transakcji INSERT i UPDATE w programie SQL Server przy użyciu programu SQL Server Management Studio lub Transact-SQL. Użyj tej opcji, jeśli wiesz, że nowe dane nie będą naruszać istniejącego ograniczenia lub jeśli ograniczenie dotyczy tylko danych już w bazie danych.

Ograniczenia i ograniczenia

Po wyłączeniu tych ograniczeń przyszłe wstawki lub aktualizacje kolumny nie zostaną zweryfikowane pod kątem warunków ograniczeń.

uprawnienia

Wymaga uprawnienia ALTER w tabeli.

Korzystanie z programu SQL Server Management Studio

Aby wyłączyć ograniczenie klucza obcego przy wykonywaniu operacji INSERT i UPDATE

  1. W Eksploratorze obiektówrozwiń tabelę z ograniczeniem, a następnie rozwiń folder Klucze.

  2. Kliknij prawym przyciskiem myszy ograniczenie i wybierz pozycję Modyfikuj.

  3. W siatce w obszarze Table Designerwybierz pozycję Wymuszaj ograniczenie klucza obcego i wybierz pozycję Nie z menu rozwijanego.

  4. Wybierz Zamknij.

  5. Aby ponownie włączyć ograniczenie w razie potrzeby, odwrócić powyższe kroki. Wybierz pozycję Wymuszaj ograniczenie klucza obcego i wybierz pozycję Tak z menu rozwijanego.

  6. Aby zaufać ograniczeniu, sprawdzając istniejące dane w relacji klucza obcego, wybierz opcję Sprawdź istniejące dane podczas tworzenia lub ponownego włączania i wybierz Tak z menu rozwijanego. To zapewni, że ograniczenie klucza obcego będzie zaufane.

  • Jeśli opcja "Sprawdzanie Istniejących Danych podczas Tworzenia lub Ponownego Włączania" jest ustawiona na "Nie", to klucz obcy nie sprawdza istniejących danych przy ponownym włączeniu. Optymalizator zapytań nie może zatem rozważyć potencjalnych ulepszeń wydajności. Zalecane są uznane klucze obce, ponieważ mogą służyć do uproszczenia planów wykonania, przyjmując założenia wynikające z ograniczenia klucza obcego. Aby sprawdzić, czy klucze obce są zaufane w bazie danych, zobacz przykładowe zapytanie w dalszej części tego artykułu.

Korzystanie z Transact-SQL

Aby wyłączyć ograniczenie klucza obcego dla instrukcji INSERT i UPDATE

  1. W Eksploratorze obiektów , nawiąż połączenie z wystąpieniem silnika bazy danych.

  2. Na pasku narzędzi Standard wybierz opcję Nowe zapytanie.

  3. Skopiuj poniższy przykład i wklej go w oknie zapytania, a następnie wybierz pozycję Wykonaj.

    USE AdventureWorks2022;  
    GO  
    ALTER TABLE Purchasing.PurchaseOrderHeader  
    NOCHECK CONSTRAINT FK_PurchaseOrderHeader_Employee_EmployeeID;  
    GO  
    
  4. Aby ponownie włączyć ograniczenie w razie potrzeby, skopiuj i wklej poniższy przykład w oknie zapytania, a następnie wybierz pozycję Wykonaj.

    USE AdventureWorks2022;  
    GO  
    ALTER TABLE Purchasing.PurchaseOrderHeader  
    CHECK CONSTRAINT FK_PurchaseOrderHeader_Employee_EmployeeID;  
    GO  
    
  5. Sprawdź, czy ograniczenie w danym środowisku jest zarówno zaufane, jak i włączone. Jeśli is_not_trusted = 1, klucz obcy nie sprawdza istniejących danych po ponownym włączeniu lub ponownym utworzeniu. Optymalizator zapytań nie może zatem rozważyć potencjalnych ulepszeń wydajności. Zalecane są zaufane klucze obce, ponieważ mogą służyć do uproszczenia planów wykonywania z założeniami opartymi na ograniczeniu klucza obcego. Skopiuj poniższy przykład i wklej go w oknie zapytania, a następnie wybierz pozycję Wykonaj.

    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
    

    Należy ustawić ograniczenie klucza obcego na zaufane, jeśli istniejące dane w tabeli są zgodne z ograniczeniem klucza obcego. Aby ustawić klucz obcy na zaufany, użyj następującego skryptu, aby ponownie ufać ograniczeniu klucza obcego, zwracając uwagi na dodatkową składnię WITH CHECK. Skopiuj poniższy przykład i wklej go w oknie zapytania, a następnie wybierz pozycję Wykonaj.

    ALTER TABLE [Purchasing].[PurchaseOrderHeader] 
    WITH CHECK 
    CHECK CONSTRAINT FK_PurchaseOrderHeader_Employee_EmployeeID;
    GO
    

Następne kroki