我正在使用SQL Server 2008 R2。
我知道如果我有一个包含10个varchar(1000)列的表,并且我实际上在每个列中放置了1000个字符并尝试INSERT该行,由于SQL Server的行限制为8K,我将收到错误。但是,如果这些列定义为varchar(max),我会收到错误吗?
如果没有,那么下面的场景如何: 我有8个varchar(1000)列,我最多可以在一个表上有2个varchar(max)列,其中包含一些字符。我会收到错误吗?
我认为答案是否定的,我不会在任何一种情况下都会出错,但我需要确定。
答案 0 :(得分:4)
自SQL Server 2005以来,您的原始假设不正确。
varchar(1000)
案例最终会将一些列存储在offrow中,因此没有理由将列中的2列声明为varchar(max)
而不是varchar(1000)
,以避免此类不存在的问题。
由于SQL Server需要遵循从数据页到关闭行页面的指针,因此存储数据会产生性能开销,因此如果您希望这是一种常见情况,您可以考虑以某种方式垂直分区表。 / p>