Sql server 如何在创建SQL Server表时向其添加时间戳列?

Sql server 如何在创建SQL Server表时向其添加时间戳列?,sql-server,Sql Server,我尝试使用以下方法: 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) ); 有人能确认这是不是正确

我尝试使用以下方法:

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)
);
有人能确认这是不是正确的方法吗。我也可以或者应该给这个栏目起一个自己的名字吗


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

我认为
timestamp
对于该数据类型来说是一个糟糕的名称(它不存储时间)在某种程度上,微软也这样做了,并且从SQL Server 2008开始就不赞成使用时间戳,而支持SQL Server 2000中引入的
rowversion

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)
);
您的代码使用了
时间戳
的行为,它为列提供了一个默认名称,
行版本
没有这样做,因此您必须为列提供一个名称

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添加到现有表中,您可以这样做

ALTER Table OrderAction ADD [RowVersion] rowversion not null
它将自动分配时间戳,您不需要像更新rowversion=getdate()这样的操作

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

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

它也不需要在数据模型中通过
UPDATE
INSERT
进行更新。但是,如果它不在您的数据模型中,那么您实际上不会从它的全部优点中获益,即获得简化的
更新
,如下所示:

WHERE ([OrderId] = @p0) AND ([RowVersion] = @p1)

这是什么,你想要什么…?我认为这个答案是关于日期时间的,而不是关于使用时间戳,这可能是误导。