Yabancı anahtar kısıtlamaları T-SQL kullanılarak nasıl geçici olarak devre dışı bırakılabilir?
SQL Server'da yabancı anahtar kısıtlamalarının devre dışı bırakılması ve etkinleştirilmesi destekleniyor mu? Yoksa tek seçeneğim kısıtlamaları düşürmek
ve ardından yeniden oluşturmak` mı?
804
3
Veritabanındaki tüm kısıtlamaları devre dışı bırakmak istiyorsanız bu kodu çalıştırmanız yeterlidir:
Bunları tekrar açmak için şunu çalıştırın: (yazdırma elbette isteğe bağlıdır ve sadece tabloları listeler)
Bir veritabanından diğerine veri doldururken kullanışlı buluyorum. Kısıtlamaları düşürmekten çok daha iyi bir yaklaşımdır. Bahsettiğiniz gibi, veritabanındaki tüm verileri bırakıp yeniden doldururken (örneğin test ortamında) kullanışlı oluyor.
Eğer tüm verileri siliyorsanız bu çözüm size yardımcı olabilir.
Ayrıca bazen tüm tetikleyicileri devre dışı bırakmak da kullanışlıdır, tam çözümü burada görebilirsiniz.
http://www.sqljunkies.com/WebLog/roman/archive/2005/01/30/7037.aspx
SQL-92 standardı, bir constaint'in DEFERRABLE olarak bildirilmesine izin verir, böylece bir işlem kapsamında ertelenebilir (örtük veya açık olarak). Ne yazık ki, SQL Server'da bu SQL-92 işlevi hala eksiktir.
Bana göre, bir kısıtlamayı NOCHECK olarak değiştirmek, veritabanı yapısını anında değiştirmeye benzer - kısıtlamaları düşürmek kesinlikle öyledir - ve kaçınılması gereken bir şeydir (örneğin, kullanıcılar daha fazla ayrıcalık gerektirir).