2010-04-23 2 views
38

È possibile modificare un tipo di colonna in un database di SQL Server 2008 da varchar(255) a varchar(MAX) senza dover rilasciare la tabella e ricreare?Varchar (255) a Varchar (MAX)

SQL Server Management Studio mi fa un errore ogni volta che provo a farlo usando quello - ma per risparmiarmi un mal di testa sarebbe bello sapere se posso cambiare il tipo senza dover DROP e CREA.

Grazie

+2

Strano, l'ho provato in SQL Server 2005, funziona perfettamente per me. – anonymous

+2

BTW, qual è stato l'errore generato? – anonymous

+1

'Il salvataggio delle modifiche non è permesso. Le modifiche apportate richiedono che le seguenti tabelle vengano eliminate e ricreate. Hai apportato modifiche a una tabella che non può essere ricreata o attivata l'opzione Impedisci il salvataggio delle modifiche che richiedono la creazione di una tabella. " L'opzione 'Impedisci salvataggio delle modifiche' non è abilitata ... – Darbio

risposta

66

Si dovrebbe essere in grado di farlo utilizzando TSQL.

Qualcosa di simile

ALTER TABLE [table] ALTER COLUMN [column] VARCHAR(MAX) 
+0

ha funzionato. grazie – Darbio

+0

per me anche mi ha aiutato ... grazie –

11

'Salvataggio delle modifiche non è permesso. Le modifiche apportate a richiedono che le seguenti tabelle vengano eliminate e ricreate. Hai apportato modifiche a una tabella che non può essere ricreata o abilitata l'opzione Impedisci di salvare le modifiche che richiedono la tabella da ricreare. ' Opzione 'Prevenire salvare le modifiche' non è abilitato ..

Questa è una nuova "feature" in SQL Server Management Studio 2008 che di default è attivata. Ogni volta che si apporta una modifica maggiore, SSMS può solo ricreare la tabella creando una nuova e quindi spostando i dati da quella precedente, tutto in background (tali modifiche includono il riordino delle colonne tra le altre cose).

Questa opzione è disattivata per impostazione predefinita, poiché se la tabella ha vincoli FK e roba, questo modo di ripetere la tabella potrebbe non riuscire. Ma puoi sicuramente attivare questa funzione!

alt text http://i42.tinypic.com/19pegj.png

è sotto Tools > Options e una volta che si deseleziona questa opzione si può fare questo tipo di modifiche alla struttura della tabella in Progettazione tabelle di nuovo.

+0

Grazie marc_s. Ho già avuto questo non-ticked e mi stava ancora impedendo di apportare le modifiche. Le alter dichiarazioni di astander sopra funzionavano quando le scrivevo loro stesse. Grazie :) – Darbio

+0

@JD: hmm ... strano ... di solito questo è il problema - felice che tu abbia già una soluzione, però! –

1

Essere consapevoli
con qualcosa di simile

ALTER TABLE [table] ALTER COLUMN [column] VARCHAR(MAX) 

https://dba.stackexchange.com/questions/15007/change-length-of-varchar-on-live-prod-table

Answare di

Martin Smith:

Se si stanno aumentando a varchar(100 - 8000) (vale a dire qualcosa di diverso da varchar(max)) e si sta facendo questo tramite TSQL piuttosto che la GUI SSMS

ALTER TABLE YourTable ALTER COLUMN YourCol varchar(200) [NOT] NULL
e non alterando la nullità della colonna da NULL a NOT NULL (che bloccherebbe la tabella mentre tutte le righe sono convalidate e potenzialmente scritte ao da NOT NULL a NULL in alcune circostanze, questa è una modifica rapida solo ai metadati. Potrebbe essere necessario attendere il blocco SCH-M sul tavolo ma, una volta acquisito, il cambiamento sarà praticamente istantaneo. Un avvertimento da tenere presente è che durante l'attesa di un blocco SCH-M altre query verranno bloccate invece di saltare la coda davanti a sé, quindi si potrebbe voler aggiungere prima un SET LOCK_TIMEOUT. Verificare inoltre nella dichiarazione ALTER TABLE se si specifica esplicitamente NOT NULL se è lo stato della colonna originale, altrimenti la colonna verrà modificata per consentire NULL.

+0

Non è identico a [questa risposta esistente] (http://stackoverflow.com/a/2696003/1402846)? – Pang

+1

Perché ALTER è un problema con varchar (MAX)? – Chris