2011-12-08 11 views
5

Ho una colonna denominata Lastmodified, con un tipo di dati Date, ma avrebbe dovuto essere DateTime.Conversione colonna da server Sql data/ora

C'è un modo per convertire la colonna?

Quando uso la funzione 'Design' di SQL Server Management Studio ottengo il seguente errore:

Saving changes is not permitted. The changes you have made require the following table to be dropped and re-created.

Non proprio interessato a far cadere il tavolo, voglio solo sapere se è possibile convertire un colonna da Date a Datetime oppure devo cancellare la colonna e crearne una nuova con il tipo di dati corretto?

+0

Certo si può convertire questo - ma per farlo, il visual designer in SQL Server Mgmt Studio creerà la nuova tabella con 'DateTime', copiare i dati, e quindi eliminare la vecchia tabella, e c'è un'opzione in 'Strumenti> Opzioni' che impedisce che per impostazione predefinita - vedere la mia risposta –

risposta

20

Non dovrebbe essere necessario rilasciare la tabella e ricrearla, a meno che quella colonna non partecipi a uno o più vincoli.

È solo possibile farlo utilizzando SQL:

ALTER TABLE Tab ALTER COLUMN LastModified datetime2 not null 

(ho scelto datetime2 sopra datetime, dal momento che il primo è recommended for all new development work, e dal momento che la colonna è attualmente date, so che sei in SQL Server 2008 o più avanti)

+0

+1 È uno degli errori SSMS. –

+0

Sto utilizzando SQL Server con nome in codice "Denali" Management Studio, quindi non sembra che cambieranno, il modo in cui funziona. – gulbaek

2

questo è solo un ambiente di sicurezza in SQL Server Mgmt Studio - è possibile spegnerlo, se siete avventurosi :-)

enter image description here

Disattivare la casella di controllo lì e si può fare quello che ti piace!

+0

Se questa opzione è disattivata, SQL Server ignora' CONSTRAINT's? –

+0

@Igor: no, non la penso così. Questa opzione impedisce solo le modifiche alle tabelle del database gestite dal visual designer ricreando la tabella (con la nuova struttura) anziché eseguire semplicemente una singola istruzione T-SQL –

2

Non è possibile modificare il tipo di una colonna sul posto. È necessario creare una nuova colonna, copiare i valori, quindi rilasciare la colonna originale.

SQL Management Studio in genere esegue questa operazione creando una tabella temporanea con il nome della nuova colonna, copiando i valori, rilasciando la tabella originale con la vecchia colonna e quindi rinominando la nuova tabella temporanea con il nuovo nome. Spesso lo fa senza che nessuno se ne renda conto.

Tuttavia, questo può essere un approccio molto invasivo, soprattutto se si dispone già di un sacco di righe nella tabella, quindi si consiglia di scrivere semplicemente uno script SQL aggiungere la nuova colonna alla tabella, copiare i valori sopra, rilasciare la colonna originale e quindi utilizzare sp_rename per riportare il nuovo nome temporaneo della colonna al nome della colonna originale. Questa è la stessa idea di ciò che sta facendo SQL Management Studio, ad eccezione del fatto che stanno cadendo e ricreando l'intera tabella, e stai semplicemente rilasciando e ricreando la colonna.

Tuttavia, se si desidera consentire a SQL Manangement Studio di farlo in questo modo, è possibile disattivare tale messaggio di errore. Credo che sia stato originariamente aggiunto perché le persone non volevano e ricreavano il tavolo per impostazione predefinita. Per disattivare questo messaggio, vai a Strumenti-> Opzioni-? Designer e deseleziona lo "Impedisci il salvataggio delle modifiche che richiedono la ricreazione della tabella", quindi dovresti essere in grado di salvare le modifiche nella finestra di progettazione.

Prevent saving changes that require table re-creation

+0

Puoi farlo molto più facilmente. –

+0

Cura da elaborare? –

+0

Siamo spiacenti. Intendevo la risposta di Damien_The_Unbeliever. –