Aracılığıyla paylaş


INSERT ve UPDATE deyimleriyle yabancı anahtar kısıtlamalarını devre dışı bırakma

Şunlar için geçerlidir: SQL Server 2016 (13.x) and later versions Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL database in Microsoft Fabric

SQL Server Management Studio veya Transact-SQL kullanarak SQL Server'da INSERT ve UPDATE işlemleri sırasında yabancı anahtar kısıtlamasını devre dışı bırakabilirsiniz. Yeni verilerin mevcut kısıtlamayı ihlal etmeyeceğini biliyorsanız veya kısıtlama yalnızca veritabanında bulunan verilere uygulanıyorsa bu seçeneği kullanın.

Sınırlamalar ve kısıtlamalar

Bu kısıtlamaları devre dışı bırakdıktan sonra, sütuna gelecek eklemeler veya güncelleştirmeler kısıtlama koşullarına göre doğrulanmaz.

İzinleri

Tablo üzerinde ALTER yetkisi gereklidir.

SQL Server Management Studio kullanma

INSERT ve UPDATE deyimleri için yabancı anahtar kısıtlamasını devre dışı bırakmak için

  1. Nesne Gezgini, kısıtlamayla tabloyu genişletin ve ardından Anahtarları klasörünü genişletin.

  2. Kısıtlamaya sağ tıklayın ve Değiştiröğesini seçin.

  3. Kılavuzda Tablo Tasarımcısıaltında, Yabancı Anahtar Kısıtlamasını Zorla seçeneğini seçin ve açılan menüden Hayır'ı seçin.

  4. Kapat'ıseçin.

  5. İstediğiniz zaman kısıtlamayı yeniden etkinleştirmek için yukarıdaki adımları tersine çevirin. Yabancı Anahtar Kısıtlamasını Zorla seçin ve açılan menüden Evet seçin.

  6. Yabancı anahtarın ilişkisinde var olan verileri denetleyerek kısıtlamaya güvenmek için Varolan Verileri Oluşturma veya Yeniden Etkinleştirme Denetle'yi seçin ve açılan menüden Evet seçin. Bu, yabancı anahtar kısıtlamasının güvenilir olmasını sağlar.

  • Oluşturma veya Yeniden Etkinleştirmede Var Olan Verileri Denetle, Yok olarak ayarlanırsa, yabancı anahtar yeniden etkinleştirildiğinde var olan verileri denetlemez. Sorgu iyileştirici bu nedenle olası performans iyileştirmelerini değerlendiremiyor. Güvenilir yabancı anahtarlar, yürütme planlarını yabancı anahtar kısıtlamasına dayalı varsayımlarla basitleştirmek için kullanılabildiğinden önerilir. Veritabanınızda yabancı anahtarlara güvenilip güvenilmediğini denetlemek için bu makalenin devamında yer alan örnek sorguya bakın.

Transact-SQL kullanma

INSERT ve UPDATE deyimleri için yabancı anahtar kısıtlamasını devre dışı bırakmak için

  1. Nesne Gezginiiçinde, bir Veritabanı Motoru örneğine bağlanın.

  2. Standart çubuğunda Yeni Sorguseçin.

  3. Aşağıdaki örneği kopyalayıp sorgu penceresine yapıştırın ve Executeöğesini seçin.

    USE AdventureWorks2022;  
    GO  
    ALTER TABLE Purchasing.PurchaseOrderHeader  
    NOCHECK CONSTRAINT FK_PurchaseOrderHeader_Employee_EmployeeID;  
    GO  
    
  4. kısıtlamayı istediğiniz zaman yeniden etkinleştirmek için aşağıdaki örneği kopyalayıp sorgu penceresine yapıştırın ve Executeöğesini seçin.

    USE AdventureWorks2022;  
    GO  
    ALTER TABLE Purchasing.PurchaseOrderHeader  
    CHECK CONSTRAINT FK_PurchaseOrderHeader_Employee_EmployeeID;  
    GO  
    
  5. Ortamınızdaki kısıtlamanın hem güvenilir hem de etkin olduğunu doğrulayın. is_not_trusted = 1 ise, yabancı anahtar yeniden etkinleştirildiğinde veya yeniden oluşturulduğunda mevcut verileri denetlemez. Sorgu iyileştirici bu nedenle olası performans iyileştirmelerini değerlendiremiyor. Güvenilir yabancı anahtarlar, yürütme planlarını yabancı anahtar kısıtlamasına dayalı varsayımlarla basitleştirmek için kullanılabildiğinden önerilir. Aşağıdaki örneği kopyalayıp sorgu penceresine yapıştırın ve Executeöğesini seçin.

    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
    

    Tablodaki mevcut veriler yabancı anahtar kısıtlamasıyla uyumluysa yabancı anahtar kısıtlamasını güvenilir olarak ayarlamanız gerekir. Yabancı anahtarı güvenilir olarak ayarlamak için, ek WITH CHECK söz dizimine dikkat ederek aşağıdaki betiği kullanarak yabancı anahtar kısıtlamasını tekrar güvenilir duruma getirin. Aşağıdaki örneği kopyalayıp sorgu penceresine yapıştırın ve Executeöğesini seçin.

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

Sonraki Adımlar