2010-09-29 14 views
6

Ho una tabella denominata "download" con alcune migliaia di righe. Ho appena aggiunto una colonna chiamata is_completed utilizzando il seguente comando:SybaseDB, modifica il valore predefinito di una colonna esistente in una tabella

ALTER TABLE downloads ADD is_completed BIT default 1 NOT NULL

Ora vorrei cambiare il valore di default per is_completed a 0 - ho provato questo comando senza alcun risultato:

ALTER TABLE downloads MODIFY is_completed default 0 

Questo non funziona, dice che ho una sintassi errata nei pressi di default. Non riesco a google questo per la vita di me. Qualcuno conosce la sintassi corretta? Voglio che tutte le future righe aggiunte a questa tabella abbiano l'impostazione predefinita is_completed su 0 se viene omesso un valore esplicito.

risposta

13

Per modificare un valore predefinito è necessario utilizzare sostituzione, piuttosto che modificare:

alter table downloads replace is_completed default 0 

Se è necessario cambiare il tipo di dati o il nulla/non nullo allora dovreste usare

alter table t modify c 
+0

questo ha funzionato alla grande. Non ho mai cercato di sostituire prima. Come mai non è menzionato nella sintassi di ALTER? – jonjonjonjuice

+0

Non ne ero molto familiare. È menzionato qui: http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.dc36271_36272_36273_36274_1250/html/refman/X68185.htm – AdamH

0

Eliminare la colonna e aggiungere nuovamente.

+1

che sogliono aiuto perché perderò tutti i dati esistenti in cui is_completed è = 1. – jonjonjonjuice

0

In SQL Server, si utilizzerà ALTER TABLE ... DROP CONSTRAINT, seguito da ALTER TABLE ... ADD CONSTRAINT. Presumibilmente, Sybase avrebbe qualcosa di simile?

0

1) tirare le PK di tutte le righe in cui is_completed è = 1 in un'altra tabella o fare qualcosa di simile:

SELECT 
    'UPDATE downloads SET is_completed is = 1 WHERE PK='+CONVERT(varchar(10),PK) 
    FROM downloads 

salvare questa uscita in modo da poter eseguire in un secondo momento, se la tabella originale ha solo a few thousand rows allora questo non dovrebbe essere così grande
2) eliminare la colonna
3) aggiungere la colonna con il default si desidera ora
4) eseguire l'output salvato dalla query sopra, o aggiornare la tabella di download con un join a la tabella utilizzata per memorizzare le righe dove is_completed è = 1

Problemi correlati