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)
这是什么,你想要什么…?我认为这个答案是关于日期时间的,而不是关于使用时间戳,这可能是误导。