ALTER TABLO KONTROL KORUMA


25

SQL Server'daki Nesne Gezgini'nden, bir yabancı anahtar kısıtlaması seçip komut dosyası yazarken, aşağıdaki kod oluşturulur.

     USE [MyTestDatabase]
     GO

     ALTER TABLE [dbo].[T2] WITH NOCHECK ADD CONSTRAINT [FK_T2_T1] FOREIGN KEY([T1ID])
     REFERENCES [dbo].[T1] ([T1ID])
     GO

     ALTER TABLE [dbo].[T2] CHECK CONSTRAINT [FK_T2_T1]
     GO

Son ifadenin "ALTER TABLE CHECK CONSTRAINT" ifadesinin amacı nedir? Çalıştırılıp çalıştırılmadığı önemli görünmüyor. Mevcut kötü verilerde başarısız olmaz ve kısıtlamanın yeni verilerde uygulanacağını değiştirmez.

Teşekkürler!

Yanıtlar:


23

Kısıtlamanın oluşturulduktan sonra etkinleştirilmesini sağlar. İfadeniz , kısıtlamanın yaratılması sırasında mevcut kötü verileri kontrol etmemeyi söyleyen parçayı ALTER TABLEiçerir WITH NOCHECK.

Yazıldığı gibi, mevcut veriler WITH NOCHECKilk açıklamadaki kısıtlamaya göre kontrol edilmeyecektir . İkinci ifadenin yayınlanması, kısıtlama kapsamındaki tablodaki gelecekteki değişiklikler için, bir ALTER TABLE [dbo].[T2] NOCHECK CONSTRAINT [FK_T2_T1]yayınlandığı noktaya kadar kısıtlamaya karşı kontrol yapılmasını sağlar .

Yazılan ifadeler, temel olarak “Bu yabancı anahtar kısıtlamasını yaratın, ancak mevcut verilere göre kontrol etmeyin. Verilerde yapılacak herhangi bir değişiklik için onu aktif hale getirin” der.


Aslında kontrol ettim, kötü veri varsa fark etmez, ilk veya ikinci satır başarısız olmaz. Bir başarısızlıkla sonuçlanmak için şöyle görünmek zorunda kalacaklar:
Delux

2
ALTER TABLE [dbo]. [T2] KONTROLÜ KONTROL KORUMA İLE [FK_T2_T1]
Delux

Sağ. Ancak, bundan sonra bir noktada bir INSERT veya kısıtlamayı ihlal eden bir UPDATE çalıştırmaya çalıştığınızda başarısız olduğunu göreceksiniz. Bu 2 ifadenin yürütülmesi sırasında hatalı veri varsa, ikisi de başarısız olmayacaktır.
squillman

7

İlk ifadeniz devre dışı bırakılmış bir kısıtlama yaratıyor. Etkinleştirilmesi ve muhtemelen güvenilmesi gerekiyor. Aşağıdaki garip sözdizimi, kısıtlamanızın etkin ve güvenilir olmasını sağlar:

ALTER TABLE YourTable
      WITH CHECK CHECK CONSTRAINT YourConstraint;

Hugo Kornelis'in yazdığı çok iyi bir blog yazısı var. Bunu detaylı olarak açıklıyor: Kısıtlamalarınıza güvenebilir misiniz?

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.