SQL Server时间戳类型列可以为NULL吗



我在"创建表格";在https://learn.microsoft.com/en-us/sql/t-sql/statements/create-table-transact-sql?view=sql-服务器-ver15

上面写着

时间戳数据类型必须为NOT NULL。

但是,当我创建一个表时,我可以创建一个时间戳类型的字段,并使其可以为null。那么,问题出在哪里呢?

更新

使用以下查询时:

USE MyDB6;
CREATE TABLE MyTable (Col1 timestamp NULL);

我预计会出现一个错误,说列Col1不能为NULL,但什么也没发生。

创建表后,我运行以下查询:

USE MyDB6
SELECT COLUMNPROPERTY(OBJECT_ID('MyTable', 'U'), 'Col1', 'AllowsNull');

我预计结果是0,但实际上是1。

因此,我的问题是,尽管文件中说";时间戳数据类型必须为NOT NULL&";,在实际情况下,该数据类型也不会为NULL,为什么create table查询不能阻止我将其设置为NULL,而系统仍然将列保存为NULL?

就像marc_s在评论中所说的,这个数据类型是内部处理的,永远不会为null。尝试以下操作:

declare @test timestamp = null -- ROWVERSION would be less confusing 
select @test

不返回NULL

至于为什么允许将其设置为null;制造这种偏离标准的行为会赢得什么?不能在TIMESTAMP/ROWVERSION列中插入NULL,根本不能对其进行UPDATE。我想更改CREATE语法以使某些数据类型不可为null是相当麻烦的;麻烦多于价值。

相关内容

  • 没有找到相关文章

最新更新