0

我一直在读这样的东西:

在 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 是默认值。

但是,我们似乎失去了在数据较小时将数据保留在行中的选项。要么全进要么全出。有没有其他方法可以做到这一点?

4

2 回答 2

0

您是对的,没有任何配置能够与旧的“TEXT_IN_ROW”相同。

您可以让 SQL Server 在页面中最多存储 8Kb,也可以将任何大小的信息存储在行外。

于 2019-11-08T13:04:21.513 回答
0

那么,如果我们有一个 varchar(max) 字段希望限制为 16 个字符,我们应该怎么做呢?

CREATE TABLE dbo.T1 (SomeCol VARCHAR(MAX) CHECK (LEN(SomeCol)<=16));
于 2019-11-08T15:43:02.563 回答