Tsql varchar(max):如何控制“的长度”;“第行”;数据

Tsql varchar(max):如何控制“的长度”;“第行”;数据,tsql,varcharmax,Tsql,Varcharmax,我一直在读这样的东西: 行中文本选项将在SQL的未来版本中删除 服务器避免在新的开发工作中使用此选项,并计划 修改当前使用行中文本的应用程序。我们建议 您可以使用varchar(max)、nvarchar(max)或 varbinary(max)数据类型。控制行内和行外行为的步骤 在这些数据类型中,请使用“行外大值类型”选项 所以,如果我们有一个varchar(max)字段,我们想将其限制为16个字符,我们该怎么办呢 谢谢 编辑。当我说“在行”时,我的意思是VARCHAR/文本字符串直接存储在数

我一直在读这样的东西:

行中文本选项将在SQL的未来版本中删除 服务器避免在新的开发工作中使用此选项,并计划 修改当前使用行中文本的应用程序。我们建议 您可以使用varchar(max)、nvarchar(max)或 varbinary(max)数据类型。控制行内和行外行为的步骤 在这些数据类型中,请使用“行外大值类型”选项

所以,如果我们有一个varchar(max)字段,我们想将其限制为16个字符,我们该怎么办呢

谢谢

编辑。当我说“在行”时,我的意思是VARCHAR/文本字符串直接存储在数据行中,而不是作为指针(字符串数据存储在别处)。如果移出行的数据不是“where”子句的一部分,则移出行的数据将提高表扫描性能

编辑。我引用的文本说:

控制行内和行外行为的步骤 在这些数据类型中,请使用“行外大值类型”选项

果不其然:

但那一页上写着:

行中文本功能将在SQL的未来版本中删除 服务器要存储大值数据,建议您使用 varchar(max)、nvarchar(max)和varbinary(max)数据类型

因此,问题依然存在

编辑。看来我们仍然可以使用此表选项:

行外的大值类型。值1表示varbinary(max),xml 表中的大型用户定义类型(UDT)列被存储出来 行的,带有指向根的16字节指针。值为0表示 varchar(max)、nvarchar(max)、varbinary(max)、xml和大UDT值 直接存储在数据行中,最多可存储8000字节,并且 只要该值可以放入记录中。如果该值不适合 在记录中,一个指针存储在行中,其余指针存储在外 LOB存储空间中的行数。默认值为0


然而,当数据很小时,我们似乎失去了将其保留在行中的选项。要么全力以赴,要么全力以赴。还有别的办法吗

您是正确的,没有任何配置能够与旧的“文本行中的文本行”执行相同的操作

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

那么,如果我们有一个我们想要的varchar(max)字段,我们应该怎么做呢 一行最多16个字符


CREATE TABLE dbo.T1(SomeCol VARCHAR(MAX)CHECK(LEN(SomeCol)“in row”指的是行中存储的字节数。如果数据大于16,那么它将存储在行外。我个人从不使用VARCHAR(MAX),因为它不能被索引。为什么不使用VARCHAR(8000)?1)字段将永远不会被索引。2)我想保持行大小尽可能小。这种文本数据很少被查询。varchar(8000)将所有文本保留在行中。行数越大=正常查询速度越慢。@johnnycrash我认为您误解了问题中包含的文档。在这两个选项中,一个始终在行外,另一个模仿前面的行为。它并不像你想象的那样总是在里面或者总是在外面。什么选项允许我们设置一个字符数限制。在该计数之上,数据存储在行外。低于或在该计数时,数据存储在行中。
CREATE TABLE dbo.T1 (SomeCol VARCHAR(MAX) CHECK (LEN(SomeCol)<=16));