2010-10-19 13 views
15

Ho problemi a rinominare una colonna in SQL Server Compact Edition. So che è possibile rinominare una tabella utilizzando sp_rename, ma questo non funziona con le colonne.Microsoft SQL Compact Edition rinominare la colonna

Ho cercato un'alternativa, ma non l'ho trovata.

Posso eliminare una colonna e aggiungerne una nuova dopo una colonna specifica? Se cancello la colonna e la aggiungo dopo quella specificata, i dati andrebbero persi, giusto?

Sembra che una volta creata la tabella non possa essere modificata correttamente: si tratta di un'altra delle limitazioni di SQLCE?

risposta

2

sp_rename lavora con colonne troppo:

EXEC sp_rename 
objname = '< Table Name.Old Column Name >', 
@newname = '<New Column Name>', 
@objtype = 'COLUMN' 

Esempio:

SP_RENAME 'MyTable.[MyOldColumnName]' , '[MyNewColumnName]', 'COLUMN' 



UPDATE: In realtà, la procedura sp_rename non è avialable in SQL CE! La soluzione è disponibile al numero http://www.bigresource.com/Tracker/Track-ms_sql-4Tvoiom3/

+0

Sei sicuro che funzioni anche con Compact Edition? L'ho provato prima di pubblicare questa domanda e l'ho provato usando il tuo esempio e non funziona. Ecco cosa ho ottenuto: il valore dell'argomento specificato per la procedura non è valido. [Argomento # = 3, Nome della procedura (se noto) = sp_rename] – lucian

+0

Hai ragione. scusa. sembra che sp_rename non sia disponibile in SQLCE. aggiornamento della mia risposta ... – Kamyar

+1

Ancora potrei usare EXEC sp_rename 'demo', 'pets' con successo in MS Compact Edition 2008 per rinominare la tabella. Ma sì, non è riuscito a rinominare le colonne. – msinfo

14

Sembra infatti che SQL CE non consenta di modificare i nomi delle colonne.

Sei sulla strada giusta con la creazione di una nuova colonna e l'eliminazione del vecchio.

Se si aggiunge solo una colonna e si elimina il vecchio, si perderanno i dati, quindi è necessario emettere una dichiarazione di aggiornamento per spostare i dati dal vecchio al nuovo.

Qualcosa sulla falsariga di

alter Table [dbo].[yourTable] add [newColumn] 

update yourTable set newColumn = oldColumn 

alter Table [dbo].[yourTable] drop column [oldColumn] 

dovrebbe creare la nuova colonna, duplicare i dati dal vecchio al nuovo e quindi rimuovere la vecchia colonna.

Spero che aiuti!

+1

È possibile che questo funzioni, ma la nuova colonna aggiunta sarà l'ultima colonna della tabella e non la voglio. C'è dopo quindi è possibile aggiungere dopo una colonna specificata ma non funziona in CE. Non riesce a trovare la parola chiave dopo. Questa è la mia query: "ALTER TABLE Inverters ADD COLUMN NewC int after Product", questo è l'errore: "Errore durante l'analisi della query. [Numero riga token = 2, Offset riga Token = 21, Token in error = after] ". – lucian

+0

Alter Table in CE sembra mancare che la funzionalità di guardare qui http://msdn.microsoft.com/en-us/library/ms174123.aspx In mancanza di questo non sono sicuro di come si potrebbe preservare l'ordine corrente a corto di ricreare la tavola. Personalmente non sarei eccessivamente preoccupato di ciò in quanto l'ordinamento delle colonne sarebbe specificato dalla mia dichiarazione selezionata comunque. – Robb

+2

Soluzione perfetta (a meno che la colonna non faccia parte di un indice). Ricorda il tipo di dati sul primo comando, oppure lo script fallirà/fallirà/riuscirà ... – Geoff

0

SDF Viewer ha questa funzione incorporata, è inoltre possibile rinominare indici, chiavi e relazioni. Basta fare clic destro sul nome che si desidera modificare nella vista ad albero del database.

+0

, se è possibile fornire un collegamento alla documentazione di SDF Viewer. –

Problemi correlati