SybaseDB, измените значение по умолчанию существующего столбца в таблице

у меня есть таблица под названием "Downloads" с несколькими тысячами строк. Я только что добавил столбец с именем is_completed, используя следующую команду:

ALTER TABLE downloads ADD is_completed BIT default 1 NOT NULL

теперь я хотел бы изменить значение по умолчанию для is_completed на 0 - я попробовал эту команду безрезультатно:

ALTER TABLE downloads MODIFY is_completed default 0

это не работает,он говорит, что у меня неправильный синтаксис по умолчанию. Я не могу, кажется, google это для жизни меня. Кто-нибудь знает правильный синтаксис? Я хочу, чтобы все будущие строки были добавлены в в этой таблице значение по умолчанию is_completed равно 0, если опущено явное значение.

4 ответов


чтобы изменить значение по умолчанию, вам нужно использовать replace, а не modify:

alter table downloads replace is_completed default 0

Если вам нужно изменить тип данных или null / not null, то вы должны использовать

alter table t modify c

в SQL Server вы бы использовали ALTER TABLE... Ограничение DROP, за которым следует ALTER TABLE... ДОБАВИТЬ ОГРАНИЧЕНИЕ. Предположительно, у Sybase было бы что-то подобное?


1) вытяните PKs всех строк, где is_completed is = 1 в другую таблицу или сделайте что-то вроде:

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

сохраните этот вывод, чтобы вы могли запустить его позже, если ваша исходная таблица имеет только a few thousand rows тогда это не должно быть таким большим
2) удалить столбец
3) Добавьте столбец по умолчанию, который вы теперь хотите
4) запустите сохраненный вывод из вышеуказанного запроса или обновите таблицу загрузок с помощью соединения с таблицей, используемой для хранения строк, где is_completed is = 1


удалить столбец и добавить снова.