2

我正在尝试使用以下内容:

CREATE TABLE [dbo].[Application] (
    [ApplicationId]   INT            IDENTITY (1, 1) NOT NULL,
    [Name] NVARCHAR (MAX) NULL,
    timestamp
    CONSTRAINT [PK_dbo.Application] PRIMARY KEY CLUSTERED ([ApplicationId] ASC)
);

有人可以确认这是否是正确的方法。我也可以或应该给该列一个自己的名称吗?

*请注意,我使用的是实体框架。那么可以添加这样的列但不将其添加到 Application 对象吗?

4

3 回答 3

6

我认为timestamp对于该数据类型(它不存储时间)来说,这是一个糟糕的名称,并且在某个地方,Microsoft 也是这样做的,并且timestamp自 SQL Server 2008 以来已弃用使用,而支持rowversion在 SQL Server 2000 中引入。

您的代码使用了一种行为timestamp,它为列提供了默认名称,rowversion但没有这样做,因此您必须为列指定名称。

CREATE TABLE [dbo].[Application] (
    [ApplicationId]   INT            IDENTITY (1, 1) NOT NULL,
    [Name] NVARCHAR (MAX) NULL,
    VerCol rowversion
    CONSTRAINT [PK_dbo.Application] PRIMARY KEY CLUSTERED ([ApplicationId] ASC)
);

参考:
rowversion (Transact-SQL)
时间戳 SQL Server 2000

*请注意,我对使用实体框架一无所知。

于 2013-03-04T06:57:32.003 回答
0
CREATE TABLE [dbo].[Application] (
    [ApplicationId]   INT            IDENTITY (1, 1) NOT NULL,
    [Name] NVARCHAR (MAX) NULL,
    timestamp DATETIME NULL DEFAULT GETDATE()
    CONSTRAINT [PK_dbo.Application] PRIMARY KEY CLUSTERED ([ApplicationId] ASC)
);
于 2013-03-04T06:53:31.760 回答
0

要将时间戳/行版本添加到现有表中,您可以这样做。

ALTER Table OrderAction ADD [RowVersion] rowversion not null

它会自动分配时间戳,你不需要像UPDATE rowversion = getdate()

请注意,如果您的表很大,则可能需要一段时间,因为它需要为每一行添加时间戳。如果您有一个巨大的表并且您正在使用像 Azure SQL 这样的可扩展数据库,您可能希望首先增加容量和/或在非工作时间执行此操作。

timestamp数据类型与数据类型相同rowversion- 取决于您如何称呼该列。

它也不需要在您的数据模型中由UPDATEor更新INSERT。但是,如果它不在您的数据模型中,那么您实际上不会从它的全部要点中受益,即得到这样的简化UPDATE

WHERE ([OrderId] = @p0) AND ([RowVersion] = @p1)
于 2021-04-17T21:17:54.917 回答