Sdílet prostřednictvím


Zakázání omezení cizího klíče pomocí příkazů INSERT a UPDATE

platí pro: SQL Server 2016 (13.x) a novější Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)databáze SQL v Microsoft Fabric

Můžete zakázat omezení cizího klíče při provádění operací INSERT a UPDATE na SQL Serveru pomocí SQL Server Management Studio nebo Transact-SQL. Tuto možnost použijte, pokud víte, že nová data nebudou porušovat stávající omezení nebo pokud se omezení vztahuje pouze na data již v databázi.

Omezení a restrikce

Po zakázání těchto omezení nebudou budoucí vložení nebo aktualizace sloupce ověřeny proti podmínkám omezení.

oprávnění

Vyžadováno oprávnění ALTER k tabulce.

Použití aplikace SQL Server Management Studio

Zakázání omezení cizího klíče pro příkazy INSERT a UPDATE

  1. V Object Explorerrozbalte tabulku, která obsahuje omezení, a potom rozbalte složku Klíče.

  2. Klikněte pravým tlačítkem myši na omezení a vyberte Upravit.

  3. V mřížce pod Návrhář tabulkyvyberte Vynutit omezení cizího klíče a v rozevírací nabídce vyberte Bez.

  4. Vyberte Zavřít.

  5. Pokud chcete omezení v případě potřeby znovu povolit, přepněte výše uvedené kroky. Vyberte Vynutit omezení cizího klíče a v rozevírací nabídce vyberte Ano.

  6. Chcete-li nastavit důvěru vůči omezení kontrolou existujících dat v relaci cizího klíče, vyberte Zkontrolovat existující data při vytvoření nebo opětovném povolení a v rozevírací nabídce vyberte Ano. Tím zajistíte, že je omezení cizího klíče ověřené.

  • Pokud je volba Kontrola stávajících dat při vytvoření nebo opětovném povolení nastavena na Ne, cizí klíč nekontroluje stávající data při opětovném povolení. Optimalizátor dotazů proto nemůže zvážit potenciální vylepšení výkonu. Důvěryhodné cizí klíče se doporučují, protože se dají použít ke zjednodušení plánů spouštění s předpoklady založenými na omezení cizího klíče. Pokud chcete zkontrolovat, jestli jsou cizí klíče v databázi důvěryhodné, podívejte se na ukázkový dotaz dále v tomto článku.

Použití Transact-SQL

Zakázání omezení cizího klíče pro příkazy INSERT a UPDATE

  1. V Průzkumník objektůse připojte k instanci databázového stroje.

  2. Na panelu Standard vyberte Nový dotaz.

  3. Zkopírujte a vložte následující příklad do okna dotazu a vyberte Spustit.

    USE AdventureWorks2022;  
    GO  
    ALTER TABLE Purchasing.PurchaseOrderHeader  
    NOCHECK CONSTRAINT FK_PurchaseOrderHeader_Employee_EmployeeID;  
    GO  
    
  4. Chcete-li znovu povolit omezení v případě potřeby, zkopírujte a vložte následující příklad do okna dotazu a vyberte Execute.

    USE AdventureWorks2022;  
    GO  
    ALTER TABLE Purchasing.PurchaseOrderHeader  
    CHECK CONSTRAINT FK_PurchaseOrderHeader_Employee_EmployeeID;  
    GO  
    
  5. Ověřte, že omezení ve vašem prostředí je důvěryhodné i povolené. Pokud is_not_trusted = 1, pak cizí klíč neověřuje existující data při jeho znovupovolení nebo znovuvytvoření. Optimalizátor dotazů proto nemůže zvážit potenciální vylepšení výkonu. Důvěryhodné cizí klíče se doporučují, protože se dají použít ke zjednodušení plánů spouštění s předpoklady založenými na omezení cizího klíče. Zkopírujte a vložte následující příklad do okna dotazu a vyberte Spustit.

    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
    

    Pokud existující data v tabulce vyhovují omezení cizího klíče, měli byste nastavit omezení cizího klíče na důvěryhodnou. Chcete-li nastavit cizí klíč jako důvěryhodný, použijte následující skript pro obnovení důvěry u omezení cizího klíče, s poznámkou na další syntaxi WITH CHECK. Zkopírujte a vložte následující příklad do okna dotazu a vyberte Spustit.

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

Další kroky