Salvataggio delle modifiche dopo la modifica della tabella in SQL Server Management Studio


265

Se voglio salvare eventuali modifiche in una tabella, precedentemente salvate in SQL Server Management Studio (nessun dato presente nella tabella), ricevo un messaggio di errore:

Il salvataggio delle modifiche non è consentito. Le modifiche apportate richiedono che le seguenti tabelle vengano eliminate e ricreate. Sono state apportate modifiche a una tabella che non può essere ricreata o abilitata l'opzione Impedisci di salvare le modifiche che richiedono la ricreazione della tabella.

Cosa può impedire che la tabella venga facilmente modificata? Oppure, è il solito modo per SQL Server Management Studio richiedere la ricostruzione della tabella per la modifica? Che cos'è: questa "opzione Impedisci il salvataggio delle modifiche" ?



1
@Pang - Questa domanda è arrivata prima, questo è il duplicato.
GrandMasterFlush


@Pang - Non lo sapevo, grazie.
GrandMasterFlush

Risposte:


573

Vai su Strumenti -> Opzioni -> Designer-> Deseleziona "Impedisci il salvataggio delle modifiche che richiedono la ricostruzione della tabella". Ecco.

Ciò accade perché a volte è necessario eliminare e ricreare una tabella per cambiare qualcosa. Questo può richiedere del tempo, poiché tutti i dati devono essere copiati in una tabella temporanea e quindi reinseriti nella nuova tabella. Poiché SQL Server per impostazione predefinita non si fida di te, devi dire "OK, so cosa sto facendo, ora lasciami fare il mio lavoro."


8
Il sito del supporto tecnico Microsoft lo scoraggia, ma se non si dispone di dati nella tabella, non vedo il danno. Probabilmente è meglio usare TSQL per apportare le modifiche.
Jon Smock,

6
Scoraggerei personalmente l'uso del designer per database importanti. L'ho visto commettere errori costosi in molte occasioni. Inoltre, promuove abitudini di sviluppo pigre e consente alle persone di modificare la struttura del database che potrebbero non essere abbastanza competenti per farlo se non sono in grado di gestire la route del codice SQL.
Mark W Dickson,

5
D'accordo, Mark, ma all'inizio dello sviluppo non ho bisogno di scrivere una pila di script.
Kristopher,

7
È scioccante che sia settembre 2016 e questo incredibile errore ostile all'utente (senza possibilità di chiedere "Ehi, ti piacerebbe consentire i cambi tavolo?") È ancora in gioco. No, hai solo un pulsante Annulla e devi apportare nuovamente le modifiche. SQL Server è il più stupido.
Mike Gledhill,

2
@Mike Gledhill Saluti dal 2019 e questo è ancora il caso LOL
Capitano Kenpachi,

116

Strumenti> Opzioni

inserisci qui la descrizione dell'immagine

Deseleziona l'opzione sopra


5
Grazie per lo screenshot Stavo cercando qualcosa del genere per aiutarmi a trovare quella stupida opzione. La finestra di dialogo dovrebbe avere una casella di spunta per "fallo comunque" quando dice che non puoi.
Chris Benard,

2
La migliore pratica Dopo aver modificato questa opzione è quella di selezionare l'opzione superiore "Genera automaticamente script di modifica" per evitare la perdita di dati
dubi,

Grazie per l'immagine. È molto utile :)
M A.

72

Per aggirare questo problema, utilizzare le istruzioni SQL per apportare le modifiche alla struttura dei metadati di una tabella.

Questo problema si verifica quando è abilitata l'opzione "Impedisci il salvataggio delle modifiche che richiedono la ricostruzione della tabella" .

Fonte: messaggio di errore quando si tenta di salvare una tabella in SQL Server 2008: "Il salvataggio delle modifiche non è consentito"


12
La mia domanda qui è: perché SQL Server non utilizza le istruzioni T-SQL richieste invece di eliminare e ricreare la tabella per ogni singola modifica? Non riesco a capire questo comportamento.
Jaime,

15

Invece di deselezionare la casella (una soluzione scadente), dovresti smettere di modificare i dati in quel modo. Se i dati devono essere modificati, quindi esegui uno script, in modo che tu possa facilmente portarli in produzione e in modo che siano sotto controllo del codice sorgente. Ciò semplifica anche l'aggiornamento delle modifiche ai test dopo che la produzione è stata ridotta allo sviluppo per consentire agli sviluppatori di lavorare con dati più recenti.


2
A) È possibile copiare lo script generato da SSMS e utilizzarlo nel proprio ambiente di produzione. B) SSMS è spesso più facile, veloce e sicuro perché SSMS gestisce tutti i dettagli per te.
Trisped

2
Itg è ancora una pessima idea. Non si desidera ricreare una tabella record di 10.000, 000 su prod. Non è più veloce Come è più sicuro? I dati errati sono dati errati e i controlli di coerenza funzionano se si utilizza uno script scritto e se si consente a SSMS di scriverne uno. È una pratica POVERA nel 100% dei casi.
HLGEM,


14

Molte modifiche che è possibile apportare in modo molto semplice e visivo nell'editor di tabelle in SQL Server Management Studio richiedono in realtà SSMS di eliminare la tabella in background e ricrearla da zero. Anche cose semplici come riordinare le colonne non possono essere espresse nell'istruzione DDL SQL standard: tutto ciò che SSMS può fare è eliminare e ricreare la tabella.

Questa operazione può essere a) molto dispendiosa in termini di tempo su una tabella di grandi dimensioni, oppure b) potrebbe anche fallire per vari motivi (come vincoli FK e cose). Pertanto, SSMS in SQL Server 2008 ha introdotto quella nuova opzione che le altre risposte hanno già identificato.

All'inizio potrebbe sembrare controintuitivo impedire tali cambiamenti - ed è certamente un fastidio su un server di sviluppo. Ma su un server di produzione, questa opzione e il suo valore predefinito di prevenzione di tali cambiamenti diventano un potenziale salvavita!


2
Ora sono su un server di sviluppo, ma su uno di produzione lo riaccenderò sicuramente. Grazie ancora per aver condiviso l'esperienza
rem

1
Ma, ad esempio, cambiare la dimensione di una colonna nvarchar da 100 a 120 è un'operazione molto semplice che potrebbe essere facilmente eseguita con ALTER TABLE ... quindi, perché SQL Server (Management Studio) fa cadere e ricreare la tabella per tale casi?
Jaime,

4
@Jaime: che devi chiedere agli sviluppatori di quel visual designer - nessun altro lo sa. È solo un dato di fatto: con il visual designer, molte modifiche semplici verranno sempre eseguite ricreando la tabella e copiandola. Se vuoi usare un approccio semplice, tocca a te gestirlo tu stesso scrivendo alcune semplici istruzioni T-SQL ed eseguendole.
marc

1
Grazie @marc_s Questa è esattamente la risposta che mi aspettavo, anche se avevo poca fiducia in loro che avevano una ragione nascosta che spiegherebbe tutto :)
Jaime

1
Questa restrizione impedisce anche che l'ID oggetto cambi senza che tu lo sappia (nel caso in cui sia necessario che ciò non accada).
Trisped

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.