【发布时间】:2021-08-15 09:28:30
【问题描述】:
我在https://docs.microsoft.com/en-us/sql/t-sql/statements/create-table-transact-sql?view=sql-server-ver15阅读了关于“CREATE TABLE”的文档
它说
时间戳数据类型不能为空。
但是,当我创建一个表时,我可以创建一个时间戳类型的字段并使其可以为空。那么,有什么问题呢?
更新
使用以下查询时:
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,为什么创建表查询不会阻止我将其设置为可为空,系统仍将列保存为可为空?
【问题讨论】:
-
因为
TIMESTAMP列(实际上是二进制行号 - 因此数据类型现在被正确称为ROWVERSION)由 SQL Server 本身专门处理,并在内部设置为新值每次更新行时 - 它永远不会是 NULL - 无论你定义什么...... -
@marc_s,看看我的 cmets
标签: sql-server null timestamp