SybaseDB,更改表中现有列的默认值

Posted

技术标签:

【中文标题】SybaseDB,更改表中现有列的默认值【英文标题】:SybaseDB , change the default value of an existing column in a table 【发布时间】:2011-04-18 23:16:18 【问题描述】:

我有一个名为“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

这不起作用,它说我的默认语法不正确。我似乎无法一辈子用谷歌搜索这个。有人知道正确的语法吗?如果省略了显式值,我希望将来添加到此表的所有行的 is_completed 默认为 0。

【问题讨论】:

【参考方案1】:

删除列并重新添加。

【讨论】:

这无济于事,因为我将丢失所有 is_completed 为 = 1 的现有数据。【参考方案2】:

在 SQL Server 中,您将使用 ALTER TABLE... DROP CONSTRAINT,然后是 ALTER TABLE... ADD CONSTRAINT。想必,Sybase 也会有类似的东西?

【讨论】:

【参考方案3】:

1) 将 WHERE is_completed is = 1 的所有行的 PK 拉到另一个表中或执行以下操作:

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 为 = 1 的行的表

【讨论】:

【参考方案4】:

要更改默认值,您需要使用替换而不是修改:

alter table downloads replace is_completed default 0

如果您需要更改数据类型或 null/not null 那么您应该使用

alter table t modify c

【讨论】:

这很好用。我以前从来没有替换过。 ALTER的语法里怎么没有提到? 我不是很熟悉它。这里提到:infocenter.sybase.com/help/index.jsp?topic=/…

以上是关于SybaseDB,更改表中现有列的默认值的主要内容,如果未能解决你的问题,请参考以下文章

更新查询以根据不同表中的值更改一个表中列的现有值

如何添加 NOT NULL 约束以及列的默认值?

更改列默认值

如何在 sql server 中设置外键列的默认值?

Laravel:迁移更改列的默认值(布尔值)

使用迁移更改表列的默认值