我在"创建表格";在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是相当麻烦的;麻烦多于价值。