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,更改表中现有列的默认值的主要内容,如果未能解决你的问题,请参考以下文章