2010-09-29 4 views
6

J'ai une table appelée "téléchargements" avec quelques milliers de lignes. Je viens d'ajouter une colonne appelée is_completed en utilisant la commande suivante:SybaseDB, changez la valeur par défaut d'une colonne existante dans une table

ALTER TABLE downloads ADD is_completed BIT default 1 NOT NULL

Maintenant, je voudrais changer la valeur par défaut pour is_completed à 0 - J'ai essayé cette commande en vain:

ALTER TABLE downloads MODIFY is_completed default 0 

Cela ne fonctionne pas, il dit que j'ai une syntaxe incorrecte proche de la valeur par défaut. Je ne peux pas sembler google ceci pour la vie de moi. Quelqu'un connaît la syntaxe correcte? Je souhaite que toutes les lignes futures ajoutées à cette table aient is_completed par défaut à 0 si une valeur explicite est omise.

Répondre

13

Pour modifier une valeur par défaut, vous devez utiliser remplacer plutôt que de modifier:

alter table downloads replace is_completed default 0 

Si vous avez besoin de changer le type de données ou nulle/non nul, alors vous devez utiliser

alter table t modify c 
+0

cela a bien fonctionné. Je n'ai jamais de troupeau de remplacer avant. Comment se fait il n'est pas mentionné dans la syntaxe pour ALTER? – jonjonjonjuice

+0

Je n'étais pas vraiment familier avec ça. Il est mentionné ici: http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.dc36271_36272_36273_36274_1250/html/refman/X68185.htm – AdamH

0

Supprimez la colonne et ajoutez de nouveau.

+1

qui wont aider parce que je vais perdre toutes les données existantes dans lesquelles is_completed est = 1. – jonjonjonjuice

0

Dans SQL Server, vous utiliseriez ALTER TABLE ... DROP CONSTRAINT, suivi de ALTER TABLE ... ADD CONSTRAINT. Vraisemblablement, Sybase aurait quelque chose de similaire?

0

1) tirer les clés primaires de toutes les lignes où is_completed est = 1 dans une autre table ou faire quelque chose comme:

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

enregistrer cette sortie afin que vous puissiez exécuter plus tard, si votre table d'origine a seulement a few thousand rows alors ce ne devrait pas être grand
2) déposer la colonne
3) ajouter la colonne avec la valeur par défaut que vous voulez maintenant
4) exécuter la sortie enregistrée de la requête ci-dessus, ou mettre à jour la table de téléchargements avec une jointure pour la table utilisée pour stocker les lignes où is_completed est = 1

Questions connexes