我一直在读这样的东西:
在 SQL Server 的未来版本中将删除 text in row 选项。避免在新的开发工作中使用此选项,并计划修改当前使用行中文本的应用程序。我们建议您使用 varchar(max)、nvarchar(max) 或 varbinary(max) 数据类型来存储大数据。要控制这些数据类型的行内和行外行为,请使用大值类型行外选项。
那么,如果我们有一个 varchar(max) 字段希望限制为 16 个字符,我们应该怎么做呢?
谢谢!
编辑。 当我说“行内”时,我的意思是 VARCHAR/TEXT 字符串直接存储在数据行中,而不是作为指针(字符串数据存储在其他地方)。如果将数据移出行将提高表扫描性能移出行的数据不是“where”子句的一部分。
编辑。 我引用的文字是这样说的:
要控制这些数据类型的行内和行外行为,请使用大值类型行外选项。
果然:
https://msdn.microsoft.com/en-us/library/ms173530.aspx
但在那一页上它说:
在 SQL Server 的未来版本中将删除行中文本功能。要存储大值数据,我们建议您使用 varchar(max)、nvarchar(max) 和 varbinary(max) 数据类型。
所以问题仍然存在。
编辑。 看来我们仍然可以使用此表选项:
大值类型超出行列。值 1 表示表中的 varbinary(max)、xml 和大型用户定义类型 (UDT) 列存储在行外,并带有指向根的 16 字节指针。值 0 表示 varchar(max)、nvarchar(max)、varbinary(max)、xml 和大 UDT 值直接存储在数据行中,最大限制为 8000 字节,只要该值适合记录。如果该值不适合记录,则将指针存储在行内,其余的将存储在 LOB 存储空间中的行外。0 是默认值。
但是,我们似乎失去了在数据较小时将数据保留在行中的选项。要么全进要么全出。有没有其他方法可以做到这一点?