İngilizce dilinde oku

Aracılığıyla paylaş


Çoğaltma için yabancı anahtar kısıtlamalarını devre dışı bırakma

Şunlar için geçerlidir: SQL Server 2016 (13.x) ve üzeri Azure SQL VeritabanıAzure SQL Yönetilen ÖrneğiAzure Synapse AnalyticsAnalytics Platform Sistemi (PDW)Microsoft Fabric SQL veritabanı

SQL Server Management Studio veya Transact-SQL kullanarak SQL Server'da çoğaltma için yabancı anahtar kısıtlamalarını devre dışı bırakabilirsiniz. Sql Server'ın önceki bir sürümünden veri yayımlıyorsanız bu yararlı olabilir.

Not

Tablo çoğaltma kullanılarak yayımlanırsa, çoğaltma aracıları tarafından gerçekleştirilen işlemler için yabancı anahtar kısıtlamaları otomatik olarak devre dışı bırakılır. Çoğaltma İçin Değil seçeneği, yabancı anahtar ve denetim kısıtlamaları için varsayılan olarak belirtilir; kısıtlamalar kullanıcı işlemleri için uygulanır, ancak ajan işlemleri için uygulanmaz. Bir çoğaltma aracısı abonede ekleme, güncelleştirme veya silme işlemi gerçekleştirdiğinde kısıtlama işaretlenmez; Kullanıcı ekleme, güncelleştirme veya silme işlemi gerçekleştirirse kısıtlama denetleniyor. Kısıtlama, veriler ilk eklendiğinde, güncelleştirildiğinde veya silindiğinde Publisher'da zaten denetlendiğinden çoğaltma aracısı için devre dışı bırakılır.

İzinleri

Tabloda ALTER izni gerektirir.

SQL Server Management Studio kullanma

Çoğaltma için yabancı anahtar kısıtlamasını devre dışı bırakmak için

  1. Nesne Gezgini, tabloyu değiştirmek istediğiniz yabancı anahtar kısıtlamasıyla genişletin ve sonra Anahtarlar klasörünü genişletin.

  2. Yabancı anahtar kısıtlamasına sağ tıklayın ve Değiştiröğesini seçin.

  3. Yabancı Anahtar İlişkileri iletişim kutusunda, Çoğaltma İçin Zorlaiçin Yok değerini seçin.

  4. Seç'iKapat.

Transact-SQL kullanma

Kopyalama için yabancı anahtar kısıtlamasını devre dışı bırakma

  1. Transact-SQL'de bu görevi gerçekleştirmek için yabancı anahtar kısıtlamasını betikleyin. Nesne Gezgini, tabloyu değiştirmek istediğiniz yabancı anahtar kısıtlamasıyla genişletin ve sonra Anahtarlar klasörünü genişletin.

  2. Yabancı anahtar kısıtlamasına sağ tıklayın, OlarakBetik Anahtarı'nı seçin, ardından DROP ve CREATE içinöğesini ve ardından yeni sorgu düzenleyicisi penceresi seçin. Elde edilen betik, AdventureWorks2022 örnek veritabanındaki aşağıdaki örneğe benzer görünmelidir:

    SQL
    ALTER TABLE [Sales].[SalesTerritoryHistory] 
    DROP CONSTRAINT [FK_SalesTerritoryHistory_SalesPerson_BusinessEntityID]
    GO
    
    ALTER TABLE [Sales].[SalesTerritoryHistory]  WITH CHECK 
    ADD CONSTRAINT [FK_SalesTerritoryHistory_SalesPerson_BusinessEntityID] 
    FOREIGN KEY([BusinessEntityID])
    REFERENCES [Sales].[SalesPerson] ([BusinessEntityID]);
    GO
    
    ALTER TABLE [Sales].[SalesTerritoryHistory] 
    CHECK CONSTRAINT [FK_SalesTerritoryHistory_SalesPerson_BusinessEntityID]
    GO
    
  3. Betiğin ALTER TABLE ... ADD CONSTRAINT bölümünde yeni yabancı anahtar kısıtlamasını değiştirin ve ÇOĞALTMA İçİn DEĞİl seçeneğini belirtin. Mesela:

    SQL
    ALTER TABLE [Sales].[SalesTerritoryHistory] 
    DROP CONSTRAINT [FK_SalesTerritoryHistory_SalesPerson_BusinessEntityID]
    GO
    
    ALTER TABLE [Sales].[SalesTerritoryHistory]  WITH CHECK 
    ADD CONSTRAINT [FK_SalesTerritoryHistory_SalesPerson_BusinessEntityID] 
    FOREIGN KEY([BusinessEntityID]) 
    REFERENCES [Sales].[SalesPerson] ([BusinessEntityID]) 
    NOT FOR REPLICATION; --added to disable constraint for replication
    GO
    
    ALTER TABLE [Sales].[SalesTerritoryHistory] 
    CHECK CONSTRAINT [FK_SalesTerritoryHistory_SalesPerson_BusinessEntityID]
    GO
    

Sonraki adımlar