Messaggio di errore Salvataggio delle modifiche non consentito in SSMS

Versione originale del prodotto: SQL Server
Numero KB originale: 956176

Summary

Questo articolo consente di risolvere il messaggio di errore "Non è consentito salvare le modifiche" visualizzato da SQL Server Management Studio (SSMS) quando si salvano le modifiche in Progettazione tabelle. L'errore si verifica quando una modifica richiede a SSMS di eliminare e ricreare la tabella e l'opzione Impedisci il salvataggio delle modifiche che richiedono la ricreazione della tabella è abilitata. Per evitare questo errore e la nuova creazione della tabella che lo causa, usare ALTER TABLE istruzioni Transact-SQL (T-SQL) anziché Progettazione tabelle. Questo articolo illustra anche come modificare l'opzione e perché disattivarla può essere rischiosa, in particolare per le tabelle che usano Change Tracking.

Sintomi: Errore durante il salvataggio delle modifiche alla tabella in Struttura tabella

Quando si tenta di salvare una tabella dopo aver apportato modifiche alla tabella utilizzando Table Designer in SQL Server Management Studio, è possibile che venga visualizzato il messaggio di errore seguente:

Il salvataggio delle modifiche non è consentito. Le modifiche apportate richiedono l'eliminazione e la ricreazione delle tabelle seguenti. Sono state apportate modifiche a una tabella che non può essere ricreata oppure è stata abilitata l'opzione Impedisci il salvataggio delle modifiche che richiedono la ricreazione della tabella.

Questo problema si verifica quando si apportano una o più delle modifiche seguenti alla tabella:

  • Si modifica l'impostazione Consenti valori Null per una colonna.
  • Riordina le colonne nella tabella.
  • Modificare il tipo di dati della colonna.
  • Si aggiunge una nuova colonna.
  • Modifichi una tabella filegroup o i relativi dati text/image.

Causa: SSMS impedisce modifiche che richiedono la ricreazione della tabella

Questo problema si verifica perché l'opzione Impedisci il salvataggio delle modifiche che richiedono la ricreazione della tabella è abilitata per impostazione predefinita in SSMS.

Quando si modifica una tabella in modo da modificare la struttura dei metadati e quindi salvare la tabella, SSMS deve ricreare la tabella in base a queste modifiche. La ricreazione di una tabella può comportare la perdita di metadati e la perdita diretta di dati.

Se l'opzione Impedisci il salvataggio delle modifiche che richiedono la ricreazione della tabella è abilitata nella sezione Finestre di progettazione della finestra Opzioni di SSMS, SSMS blocca il salvataggio e viene visualizzato il messaggio di errore indicato nella sezione Sintomi . Per altre informazioni su questa opzione, vedere Opzioni (Progettisti - pagina Progettisti tabelle e database).

Soluzione alternativa: usare ALTER TABLE invece di Struttura tabella

Per risolvere questo problema, usare le istruzioni T-SQL ALTER TABLE per apportare le modifiche alla struttura dei metadati di una tabella. Per eseguire le istruzioni SQL, seguire questa procedura:

  1. In SQL Server Management Studio connettersi all'istanza e quindi selezionare il database che contiene la tabella.
  2. Nella barra degli strumenti selezionare Nuova query.
  3. Immettere l'istruzione T-SQL nella finestra di query e quindi selezionare Esegui.

È necessaria l'autorizzazione ALTER sulla tabella per eseguire ALTER TABLE le istruzioni.

Ad esempio, per modificare la colonna MyDate di tipo datetime in una tabella denominata MyTable per accettare valori NULL, usare l'istruzione seguente:

ALTER TABLE MyTable ALTER COLUMN MyDate datetime NULL;

Per aggiungere una nuova colonna denominata MyNewColumn di tipo int che accetta valori NULL nella stessa tabella, utilizzare l'istruzione seguente:

ALTER TABLE MyTable ADD MyNewColumn int NULL;

Importante

È consigliabile non risolvere questo problema disattivando l'opzione Impedisci il salvataggio delle modifiche che richiedono la ricreazione della tabella . Per altre informazioni sui rischi di disattivazione di questa opzione, vedere Rischio di disattivare l'opzione "Impedisci il salvataggio delle modifiche che richiedono la ricreazione della tabella".

Come modificare l'opzione "Impedisci il salvataggio delle modifiche che richiedono la ricreazione della tabella"

Per selezionare o deselezionare l'opzione Impedisci il salvataggio delle modifiche che richiedono la ricreazione della tabella , seguire questa procedura:

  1. Aprire SQL Server Management Studio.
  2. Nel menu Strumenti, selezionare Opzioni.
  3. Nel riquadro di spostamento della finestra Opzioni selezionare Progettisti.
  4. Selezionare o deselezionare la casella di controllo Impedisci il salvataggio delle modifiche che richiedono la ricreazione della tabella e quindi selezionare OK.

Note

Se si disabilita questa opzione, non viene visualizzato alcun avviso quando si salva la tabella che le modifiche apportate hanno cambiato la struttura dei metadati della tabella. In questo caso, la perdita di dati può verificarsi quando si salva la tabella.

Cosa si rischia disattivando l'opzione "Impedisci il salvataggio delle modifiche che richiedono la ricreazione della tabella"

Anche se la disattivazione di questa opzione consente di evitare l'errore, può anche causare la perdita di modifiche. Quando l'opzione Impedisci il salvataggio delle modifiche che richiedono la ricreazione della tabella è abilitata, SSMS visualizza l'errore per ogni modifica che richiede la ricreazione della tabella, perché la ricreazione di una tabella può comportare la perdita di metadati o dati in generale. Il Tracciamento modifiche è un esempio dei metadati che possono andare persi.

Si supponga, ad esempio, di abilitare la funzionalità Rilevamento modifiche in SQL Server per tenere traccia delle modifiche apportate alla tabella. Quando si esegue un'operazione che causa la ricreazione della tabella, viene visualizzato il messaggio di errore indicato nella sezione Sintomi . Tuttavia, se si disattiva questa opzione, le informazioni di rilevamento modifiche esistenti vengono eliminate quando la tabella viene ricreata. Pertanto, si consiglia di non aggirare questo problema disattivando l'opzione.

Come verificare se Change Tracking è abilitato per una tabella

Per determinare se la funzionalità Rilevamento modifiche è abilitata per una tabella, seguire questa procedura:

  1. In SQL Server Management Studio individuare la tabella in Esplora oggetti.
  2. Fare clic con il pulsante destro del mouse sulla tabella e quindi scegliere Proprietà.
  3. Nella finestra di dialogo Proprietà tabella selezionare Rilevamento modifiche. Se il valore dell'elemento Rilevamento modifiche è True, Rilevamento modifiche viene abilitato per la tabella. Se il valore è False, è disabilitato.

Quando la funzionalità Rilevamento modifiche è abilitata, usare istruzioni T-SQL per modificare la struttura dei metadati della tabella. Per altre informazioni sull'abilitazione e la disabilitazione di Rilevamento modifiche, vedere Abilitare e disabilitare Rilevamento modifiche.

Procedura per riprodurre il problema

Per riprodurre l'errore, seguire questa procedura:

  1. In SQL Server Management Studio, creare una tabella contenente una chiave primaria nello strumento Progettazione tabelle.
  2. Fare clic con il pulsante destro del mouse sul database che contiene la tabella e quindi scegliere Proprietà.
  3. Nella finestra di dialogo Proprietà database selezionare Rilevamento modifiche.
  4. Impostare il valore dell'elemento Rilevamento modifiche su True e quindi selezionare OK.
  5. Fare clic con il pulsante destro del mouse sulla tabella e quindi scegliere Proprietà.
  6. Nella finestra di dialogo Proprietà tabella selezionare Rilevamento modifiche.
  7. Impostare il valore dell'elemento Rilevamento modifiche su True e quindi selezionare OK.
  8. Nel menu Strumenti, selezionare Opzioni.
  9. Nella finestra di dialogo Opzioni selezionare Progettisti.
  10. Selezionare la casella di controllo Impedisci il salvataggio delle modifiche che richiedono la ricreazione della tabella e quindi selezionare OK.
  11. Nello strumento Progettazione tabelle modificare l'impostazione Consenti valori Null in una colonna esistente.
  12. Provare a salvare la modifica alla tabella.