【问题标题】:Alter column of type timestamp更改时间戳类型的列
【发布时间】:2016-02-10 16:57:00
【问题描述】:

我想更新一个空表,其中有一列时间戳类型为 varbinary(8)

我使用了以下命令

ALTER TABLE Notification  ALTER COLUMN RowRevisionID varbinary(8) 

我得到一个错误

无法更改列“RowRevisionID”,因为它是“时间戳”。

如何更改时间戳列类型?

我不希望删除该列并添加一个新列,因为这将在末尾创建一个列,并且我希望保留列顺序以在 INSERT INTO 中使用此表

【问题讨论】:

  • @JamesZ ,我想保留列顺序,因为该表将在 INSERT INTO 语句中使用,如果我删除该列并添加一个新列,则在末尾添加一个新列桌子。

标签: sql sql-server sql-server-2012


【解决方案1】:

很遗憾,您无法更改时间戳列,正如错误所暗示的那样;你被你所拥有的东西困住了。此外,每个表只能有一个时间戳列,因此您不能在任何解决方案中复制该列。

您最好的选择(取决于表的大小)可能是将数据复制到临时表中(使用 SELECT * INTO MyTempTable FROM OriginalTable 语法来保留时间戳值),然后删除并重新创建包含所需列的原始表所需的顺序并重新插入数据,或者您可以将新的VARBINARY(8) 列添加到现有表并删除时间戳列,保留原始表。可能还有其他类似的解决方案,但都需要一个新列,而不是 ALTER COLUMN 脚本。

【讨论】:

    【解决方案2】:

    您正在寻找:

    ALTER TABLE Notification DROP RowRevisionID;

    ALTER TABLE Notification ADD RowRevisionID varbinary(8) AFTER myOtherColumn;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-05
      • 2017-08-20
      • 2021-11-19
      • 1970-01-01
      • 2021-08-12
      • 2015-03-26
      相关资源
      最近更新 更多