15

我需要在 SQL Server 2000 中创建一个表。

create table TABLE (
        DBID_ bigint not null,
        CLASS_ varchar(255) not null,
        DBVERSION_ integer not null,
        HPROCI_ bigint,
        TYPE_ varchar(255),
        EXECUTION_ varchar(255),
        ACTIVITY_NAME_ varchar(255),
        START_ timestamp,
        END_ timestamp,
        DURATION_ bigint,
        TRANSITION_ varchar(255),
        NEXTIDX_ integer,
        HTASK_ bigint,
        primary key (DBID_)
    );

当我运行它时发生错误。

一张表只能有一个时间戳列。因为表TABLE 已经有一个,所以END_不能添加列。

timestampSQL Server的最佳替代方案是什么?如何解决这个问题?

4

2 回答 2

44

timestamp顾名思义,A不是日期时间数据类型。它是一个对于服务器时钟的内部值,但不能从它的值推导出实际时间。它仅用于评估行是否已更新,因此表只能具有此类型的一列。该timestamp语法实际上已被弃用,现在已命名rowversion,这更有意义。

鉴于您的列名(开始,结束),我假设您正在尝试存储实际时间戳,而应该将其datetime用作您的数据类型。

于 2012-08-21T22:24:14.847 回答
4

在 Sql Servertimestamp中是一种数据类型,它不是时间。它基本上是一种对记录进行版本控制的方法,它用于在断开连接的数据库模型中进行乐观锁定。当您加载记录时,您会选择时间戳列。只有当时间戳列中的值相同时,您才将其写回,因为这意味着自从您获得它以来没有其他人更改过它。

如果您想要一个真实datetime值,请添加一个不为空的日期时间,或者使用默认值GetDate()并记住更新每个更新。

于 2012-08-21T22:29:22.367 回答