2010-09-29 10 views
6

Tengo una tabla llamada "descargas" con unos pocos miles de filas. Acabo de añadir una columna llamada is_completed con el siguiente comando:SybaseDB, cambie el valor predeterminado de una columna existente en una tabla

ALTER TABLE downloads ADD is_completed BIT default 1 NOT NULL

Ahora me gustaría cambiar el valor por defecto para is_completed a 0 - Probé este comando en vano:

ALTER TABLE downloads MODIFY is_completed default 0 

Esto no funciona, dice que tengo una sintaxis incorrecta cerca del valor predeterminado. Parece que no puedo googlear esto por mi vida. Alguien sabe la sintaxis correcta? Quiero que todas las filas futuras agregadas a esta tabla tengan is_completed por defecto a 0 si se omite un valor explícito.

Respuesta

13

Para alterar una forma predeterminada es necesario utilizar reemplazar en lugar de modificar:

alter table downloads replace is_completed default 0 

Si necesita cambiar el tipo de datos o la nula/no es nulo, entonces debería usar

alter table t modify c 
+0

esto funcionó muy bien. Nunca arreglé de reemplazar antes. ¿Cómo es que no se menciona en la sintaxis para ALTER? – jonjonjonjuice

+0

No estaba realmente familiarizado con eso. Se menciona aquí: http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.dc36271_36272_36273_36274_1250/html/refman/X68185.htm – AdamH

0

Suelta la columna y vuelve a agregar.

+1

que suele Ayuda porque perderé todos los datos existentes en los que is_completed is = 1. – jonjonjonjuice

0

En SQL Server, usaría ALTER TABLE ... DROP CONSTRAINT, seguido de ALTER TABLE ... ADD CONSTRAINT. Presumiblemente, Sybase tendría algo similar?

0

1) tirar de las PK de todas las filas donde is_completed es = 1 en otra tabla o hacer algo como:

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

guardar esta salida para que pueda ejecutar más tarde, si la tabla original tiene solamente a few thousand rows entonces esto no debería ser tan grande
2) eliminar la columna
3) añadir la columna con el valor por defecto ahora quiere
4) ejecutar la salida salvado de la consulta anterior, o actualizar la tabla de descargas, con unirse a la tabla utilizada para almacenar las filas donde is_completed es = 1

Cuestiones relacionadas