我会简短而甜蜜的。我正在尝试将rowversion
类型的列添加到现有表中。我的想法是,通过将其添加为NULL
,不会对现有行加盖时间戳,但可惜它们是时间戳。如果是这种情况,那么在什么情况下该列会接受空值?
最佳答案
在实践中,没有功能上的差异(但可能存在存储差异,请参见下文)。您不能将NULL
插入rowversion
列。
即使您在NULL
语句中为rowversion
列指定INSERT
,服务器也会插入生成的非null值。无论您如何声明rowversion
列(NULL
或NOT NULL
),它都将像这样工作。
docs仅提及一次可为空的rowversion
:
如果您将rowversion
指定为可空值,则它应该在磁盘上占据更多空间,以允许存储可能的NULL
值(实际上是不会发生的)。每个可为空的列都会产生开销,请参阅:How much size "Null" value takes in SQL Server
此外,与varbinary(8)
相比,binary(8)
在磁盘上占用的空间更多,以存储值的长度。
说了这么多,我试图创建两个表,每个表有10M行。一个带有可空rowversion
列,第二个带有不可空rowversion
列。在我的测试中,两个表占用的磁盘空间完全相同。我在SQL Server 2014 Express上进行了测试。
关于sql-server - 向表添加可为空的rowversion列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42215930/