SQL Server Management Studio'da tablo düzenlemesinden sonra değişiklikleri kaydetme


265

Daha önce SQL Server Management Studio'da kaydedilmiş bir tablodaki değişiklikleri kaydetmek isterseniz (tablodaki veri yok) Bir hata mesajı alıyorum:

Değişikliklerin kaydedilmesine izin verilmiyor. Yaptığınız değişiklikler için aşağıdaki tabloların bırakılması ve yeniden oluşturulması gerekir. Yeniden oluşturulamayan bir tabloda değişiklikler yaptınız veya tablonun yeniden oluşturulmasını gerektiren değişiklikleri kaydetmeyi önle seçeneğini etkinleştirdiniz.

Masanın kolayca düzenlenmesini ne engelleyebilir? Veya SQL Server Management Studio'nun düzenleme için yeniden tablo oluşturmayı gerektirmesi normal bir yol mu? Nedir - bu "Değişiklikleri kaydetmeyi engelle" seçeneği ?



1
@Pang - Bu soru önce geldi, bu kopya.
GrandMasterFlush


@Pang - Bunu bilmiyordum, teşekkürler.
GrandMasterFlush

Yanıtlar:


573

Araçlar -> Seçenekler -> Tasarımcılar-> "Yeniden tablo oluşturma gerektiren değişiklikleri kaydetmeyi engelle" seçeneğinin işaretini kaldırın. Voila.

Bu, bazen bir şeyi değiştirmek için bir tabloyu bırakmak ve yeniden oluşturmak gerektiğinden olur. Tüm verilerin geçici bir tabloya kopyalanması ve daha sonra yeni tabloya yeniden eklenmesi gerektiğinden, bu biraz zaman alabilir. SQL Server varsayılan olarak size güvenmediği için "Tamam, ne yaptığımı biliyorum, şimdi işimi yapmama izin ver" demelisiniz.


8
Microsoft Destek sitesi bunu engelliyor, ancak tabloda herhangi bir veri yoksa, zararı görmüyorum. Muhtemelen değişiklikleri yapmak için TSQL kullanmak en iyisidir.
Jon Smock

6
Kişisel olarak önemli veritabanları için tasarımcıyı kullanmaktan vazgeçerim. Birçok kez pahalı hatalar yaptığını gördüm. Ayrıca, tembel geliştirme alışkanlıklarını teşvik eder ve SQL kod yolunu yönetemezlerse, bunu yapacak kadar yeterli olmayan veritabanı yapısını değiştirmelerine izin verir.
Mark W Dickson

5
Kabul etti, Mark, henüz erken gelişimde bir yığın senaryo yazmam gerekmiyor.
Kristopher

7
Eylül 2016 olması şok edici ve bu inanılmaz kullanıcı dostu hata ("Hey, tablo değişikliklerini İZİN VERMEK İSTER MİSİNİZ?") Sorusu devam ediyor. Hayır, sadece bir İptal düğmesi alırsınız ve değişikliklerinizi tekrar yapmanız gerekir. SQL Server en aptalca.
Mike Gledhill

2
@Mike Gledhill Selamlar 2019 ve bu hala böyle LOL
Kaptan Kenpachi

116

Araçlar> Seçenekler

resim açıklamasını buraya girin

Yukarıdaki seçeneğin işaretini kaldırın


5
Ekran görüntüsü için teşekkürler. O aptal seçeneği bulmama yardım edecek böyle bir şey arıyordum. Yapamayacağınızı söylediğinde iletişim kutusunda "yine de yap" onay kutusu bulunmalıdır.
Chris Benard

2
En İyi Uygulama Bu seçeneği değiştirdikten sonra, veri kaybını önlemek için üstteki 'Değişiklik komut dosyalarını otomatik
oluştur

Görüntü için teşekkürler. Çok faydalı :)
M A.

72

Bu soruna geçici bir çözüm bulmak için <a0> </a0>, bir tablonun meta veri yapısında değişiklik yapmak için SQL deyimlerini kullanın.

Bu sorun, "Tablo yeniden oluşturma gerektiren değişiklikleri kaydetmeyi engelle" seçeneği etkinleştirildiğinde oluşur.

Kaynak: SQL Server 2008'de bir tablo kaydetmeye çalıştığınızda hata iletisi: "Değişiklikleri kaydetmeye izin verilmiyor"


12
Benim burada soru: SQL Server neden her bir değişiklik için tablo bırakarak ve yeniden oluşturmak yerine gerekli T-SQL deyimlerini kullanmıyor? Bu davranışı anlayamıyorum.
Jaime

15

Kutunun işaretini kaldırmak (kötü bir çözüm) yerine, verileri bu şekilde düzenlemeyi DURDURMALISINIZ. Verilerin değiştirilmesi gerekiyorsa, bunu bir komut dosyasıyla yapın, böylece onu üretime kolayca aktarabilir ve böylece kaynak kontrolü altında olabilir. Bu aynı zamanda, geliştiricilerin daha taze verilere karşı çalışmasını sağlamak için üretim geliştirilmeye başlandıktan sonra test değişikliklerinin yenilenmesini kolaylaştırır.


2
A) SSMS'nin oluşturduğu komut dosyasını kopyalayabilir ve üretim ortamınızda kullanabilirsiniz. B) SSMS sizin için tüm ayrıntıları ele aldığından SSMS genellikle daha kolay, daha hızlı ve daha güvenlidir.
2014'te

2
Itg hala çok kötü bir fikir. Ürün üzerinde 10.000, 000 kayıt tablosu yeniden oluşturmak istemezsiniz. Daha hızlı değil. Nasıl daha güvenli? Bozuk veriler bozuk verilerdir ve yazdığınız bir komut dosyası kullanırsanız ve SSMS'nin bir komut dosyası yazmasına izin verirseniz tutarlılık denetimleri çalışır. Olguların% 100'ünde POOR uygulamasıdır.
HLGEM

15

SSMS'ye gidin ve bunu deneyin

Menü >> Araçlar >> Seçenekler >> Tasarımcılar >> “Yeniden tablo oluşturma gerektiren değişiklikleri kaydetmeyi önle” seçeneğinin işaretini kaldırın.

İşte bununla ilgili çok iyi bir açıklama: http://blog.sqlauthority.com/2009/05/18/sql-server-fix-management-studio-error-saving-changes-in-not-permitted-the-changes -sen-yaptık-gerektiren-following-tablolar-to-bırakılabilir-ve-re-yaratılan-sen-var-ya-yapımı-değişikliklerin-to-a-sekme /


14

SQL Server Management Studio'daki tablo düzenleyicide kolayca ve görsel olarak yapabileceğiniz birçok değişiklik aslında SSMS'nin tabloyu arka planda bırakmasını ve sıfırdan yeniden oluşturmasını gerektirir. Sütunları yeniden sıralamak gibi basit şeyler bile standart SQL DDL deyiminde ifade edilemez - SSMS'nin yapabileceği tek şey tabloyu bırakmak ve yeniden oluşturmaktır.

Bu işlem a) büyük bir masada çok zaman harcayabilir veya b) çeşitli nedenlerle (FK kısıtlamaları ve benzeri şeyler) bile başarısız olabilir. Bu nedenle, SQL Server 2008'deki SSMS, diğer yanıtların zaten tanımladığı yeni seçeneği tanıttı.

Bu tür değişiklikleri önlemek ilk başta karşı sezgisel görünebilir - ve kesinlikle bir dev sunucusunda bir sıkıntı. Ancak bir üretim sunucusunda, bu seçenek ve bu tür değişiklikleri önlemenin varsayılan değeri potansiyel bir hayat kurtarıcı olur!


2
Şimdi bir geliştirme sunucusuyum, ama bir üretim sunucusunda kesinlikle geri açacağım. Deneyimi paylaştığınız için bir kez daha teşekkür ederiz
rem

1
Ancak, örneğin, bir nvarchar sütununun boyutunu 100'den 120'ye değiştirmek, ALTER TABLE ile kolayca yapılabilecek çok basit bir işlemdir ... o zaman, SQL Server (Management Studio) neden böyle bir tabloyu düşürüyor ve yeniden oluşturuyor? durumlar?
Jaime

4
@Jaime: bu görsel tasarımcının geliştiricilerine sormanız gerekiyor - başka kimse bilmiyor. Bu sadece bir gerçek - görsel tasarımcı ile, masayı yeniden oluşturarak ve kopyalayarak her zaman birçok basit değişiklik yapılacak. Eğer basit bir yaklaşım kullanmak istiyorsanız, bu kadar size kalmış bazı kolay T-SQL ifadeleri yazma ve bunları yürüterek kendiniz işlemek için.
marc_s

1
Teşekkürler @marc_s Her şeyi açıklayacak gizli bir nedene sahip olduklarına dair çok az inancım olsa da, bu beklediğim cevaptı :)
Jaime

1
Bu kısıtlama aynı zamanda siz bilmeden nesne kimliğinin değişmesini de önler (bunun gerçekleşmemesi gerektiğinde).
2014'te

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.