Komunikat o błędzie „Zapisywanie zmian jest niedozwolone” w SSMS

Oryginalna wersja produktu: SQL Server
Oryginalny numer KB: 956176

Summary

Ten artykuł ułatwia obejście komunikatu o błędzie „Zapisywanie zmian jest niedozwolone”, który jest wyświetlany przez program SQL Server Management Studio (SSMS) podczas zapisywania zmian w Projektancie tabel. Błąd występuje, gdy zmiana wymaga, aby program SSMS usunął i ponownie utworzył tabelę, a opcja Zapobiegaj zapisywaniu zmian, które wymagają ponownego tworzenia tabeli, jest włączona. Aby uniknąć tego błędu i ponownego utworzenia tabeli, które go powoduje, użyj instrukcji ALTER TABLE Transact-SQL (T-SQL) zamiast Projektanta tabel. W tym artykule wyjaśniono również, jak zmienić opcję i dlaczego jej wyłączenie może być ryzykowne, zwłaszcza w przypadku tabel korzystających ze śledzenia zmian.

Objawy: Błąd podczas zapisywania zmian tabeli w Projektancie tabel

Podczas próby zapisania tabeli po wprowadzeniu zmian w tabeli przy użyciu Projektant tabel w programie SQL Server Management Studio może zostać wyświetlony następujący komunikat o błędzie:

Zapisywanie zmian jest niedozwolone. Wprowadzone zmiany wymagają usunięcia i ponownego utworzenia następujących tabel. Wprowadzono zmiany w tabeli, której nie można ponownie utworzyć, lub włączono opcję Zapobiegaj zapisywaniu zmian wymagających ponownego utworzenia tabeli.

Ten problem występuje, gdy wprowadzisz co najmniej jedną z następujących zmian w tabeli:

  • Należy zmienić ustawienie Zezwalaj na wartości null dla kolumny.
  • Zmieniasz kolejność kolumn w tabeli.
  • Zmieniasz typ danych kolumny.
  • Dodajesz nową kolumnę.
  • Zmieniasz filegroup tabeli lub jej dane text/image.

Przyczyna: program SSMS uniemożliwia zmiany, które wymagają ponownego utworzenia tabeli

Ten problem występuje, ponieważ opcja Zapobiegaj zapisywaniu zmian, które wymagają ponownego tworzenia tabeli , jest domyślnie włączona w programie SSMS.

Gdy zmienisz tabelę w sposób, który zmieni jego strukturę metadanych, a następnie zapiszesz tabelę, program SSMS musi ponownie utworzyć tabelę na podstawie tych zmian. Ponowne utworzenie tabeli może spowodować utratę metadanych i bezpośrednią utratę danych.

Jeśli opcja Zapobiegaj zapisywaniu zmian, które wymagają ponownego tworzenia tabeli, jest włączona w sekcji Projektanci w oknie Opcje programu SSMS, program SSMS blokuje zapisywanie i zostanie wyświetlony komunikat o błędzie wymieniony w sekcji Objawy. Aby uzyskać więcej informacji na temat tej opcji, zobacz Opcje (projektanci — strona Projektantów tabel i baz danych).

Obejście: Użyj ALTER TABLE zamiast projektanta tabel

Aby obejść ten problem, użyj instrukcji ALTER TABLE T-SQL, aby wprowadzić zmiany w strukturze metadanych tabeli. Aby uruchomić polecenia, wykonaj następujące kroki:

  1. W SQL Server Management Studio połącz się z wystąpieniem, a następnie wybierz bazę danych zawierającą tabelę.
  2. Na pasku narzędzi wybierz pozycję Nowe zapytanie.
  3. Wprowadź instrukcję języka T-SQL w oknie zapytania, a następnie wybierz pozycję Wykonaj.

Do uruchamiania instrukcji ALTER TABLE potrzebne jest uprawnienie ALTER do tabeli.

Aby na przykład zmienić kolumnę MyDate typu datetime w tabeli o nazwie MyTable tak, aby akceptowała wartości NULL, użyj następującej instrukcji:

ALTER TABLE MyTable ALTER COLUMN MyDate datetime NULL;

Aby dodać nową kolumnę o nazwie MyNewColumn typu int , która akceptuje wartości NULL w tej samej tabeli, użyj następującej instrukcji:

ALTER TABLE MyTable ADD MyNewColumn int NULL;

Ważne

Zdecydowanie zalecamy, aby nie obchodzić tego problemu przez wyłączenie opcji Zapobiegaj zapisywaniu zmian, które wymagają ponownego tworzenia tabeli. Aby uzyskać więcej informacji na temat ryzyka wyłączenia tej opcji, zobacz Ryzyko wyłączenia opcji „Zapobieganie zapisywaniu zmian, które wymagają ponownego tworzenia tabeli”.

Jak zmienić opcję "Zapobieganie zapisywaniu zmian, które wymagają ponownego tworzenia tabeli"

Aby wybrać lub wyczyścić opcję Zapobiegaj zapisywaniu zmian, które wymagają ponownego tworzenia tabeli , wykonaj następujące kroki:

  1. Otwórz SQL Server Management Studio.
  2. W menu Narzędzia wybierz pozycję Opcje.
  3. W okienku nawigacji okna Opcje wybierz pozycję Projektanci formularzy.
  4. Zaznacz lub wyczyść pole wyboru Zapobiegaj zapisywaniu zmian, które wymagają ponownego tworzenia tabeli , a następnie wybierz przycisk OK.

Nota

Jeśli wyłączysz tę opcję, nie otrzymasz ostrzeżenia podczas zapisywania tabeli, że wprowadzone zmiany zmieniły strukturę metadanych tabeli. W takim przypadku utrata danych może wystąpić podczas zapisywania tabeli.

Ryzyko odznaczenia opcji „Zapobiegaj zapisywaniu zmian, które wymagają ponownego utworzenia tabeli”

Mimo że wyłączenie tej opcji może pomóc uniknąć błędu, może również spowodować utratę zmian. Po włączeniu opcji Zapobiegaj zapisywaniu zmian, które wymagają ponownego tworzenia tabeli , program SSMS wyświetla błąd dla każdej zmiany, która wymaga ponownego utworzenia tabeli, ponieważ ponowne utworzenie tabeli może spowodować utratę metadanych lub danych w ogóle. Śledzenie zmian to jeden z przykładów metadanych, które można utracić.

Załóżmy na przykład, że włączysz funkcję Change Tracking w SQL Server w celu śledzenia zmian w tabeli. Podczas wykonywania operacji, która powoduje ponowne utworzenie tabeli, zostanie wyświetlony komunikat o błędzie wymieniony w sekcji Objawy . Jeśli jednak wyłączysz tę opcję, istniejące informacje o śledzeniu zmian zostaną usunięte po ponownym utworzeniu tabeli. Dlatego zalecamy, aby nie obchodzić tego problemu, wyłączając opcję.

Jak sprawdzić, czy śledzenie zmian jest włączone dla tabeli

Aby ustalić, czy funkcja Śledzenia zmian jest włączona dla tabeli, wykonaj następujące kroki:

  1. W SQL Server Management Studio znajdź tabelę w Eksploratorze obiektów.
  2. Kliknij prawym przyciskiem myszy tabelę, a następnie wybierz polecenie Właściwości.
  3. W oknie dialogowym Właściwości tabeli wybierz pozycję Śledzenie zmian. Jeśli wartość elementu Change Tracking ma wartość True, śledzenie zmian jest włączone dla tabeli. Jeśli wartość to Fałsz, jest wyłączona.

Po włączeniu funkcji Change Tracking użyj instrukcji T-SQL, aby zmienić strukturę metadanych tabeli. Aby uzyskać więcej informacji na temat włączania i wyłączania śledzenia zmian, zobacz Włączanie i wyłączanie śledzenia zmian.

Kroki odtworzenia błędu

Aby odtworzyć błąd, wykonaj następujące kroki:

  1. W SQL Server Management Studio utwórz tabelę zawierającą klucz podstawowy w narzędziu Projektant tabel.
  2. Kliknij prawym przyciskiem myszy bazę danych zawierającą tę tabelę, a następnie wybierz pozycję Właściwości.
  3. W oknie dialogowym Właściwości bazy danych wybierz pozycję Śledzenie zmian.
  4. Ustaw wartość elementu Change Tracking na true, a następnie wybierz przycisk OK.
  5. Kliknij prawym przyciskiem myszy tabelę, a następnie wybierz polecenie Właściwości.
  6. W oknie dialogowym Właściwości tabeli wybierz pozycję Śledzenie zmian.
  7. Ustaw wartość elementu Change Tracking na true, a następnie wybierz przycisk OK.
  8. W menu Narzędzia wybierz pozycję Opcje.
  9. W oknie dialogowym Opcje wybierz pozycję Projektanci.
  10. Zaznacz pole wyboru Zapobiegaj zapisywaniu zmian, które wymagają ponownego tworzenia tabeli , a następnie wybierz przycisk OK.
  11. W narzędziu Projektant tabel zmień ustawienie Zezwalaj na wartości null w istniejącej kolumnie.
  12. Spróbuj zapisać zmianę do tabeli.