【问题标题】:SybaseDB , change the default value of an existing column in a tableSybaseDB,更改表中现有列的默认值
【发布时间】: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。

【问题讨论】:

    标签: sql database default sybase


    【解决方案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
        

        【讨论】:

        猜你喜欢
        • 2021-06-07
        • 1970-01-01
        • 2021-09-01
        • 2014-11-06
        • 1970-01-01
        • 2010-12-18
        • 2020-03-12
        • 1970-01-01
        • 2012-01-25
        相关资源
        最近更新 更多