varchar(max):如何控制“in row”数据的长度

时间:2015-08-28 20:56:11

标签: tsql varcharmax

我一直在读这样的东西:

  

将在SQL的未来版本中删除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的未来版本中删除行中的文本功能   服务器。要存储大值数据,我们建议您使用   varchar(max),nvarchar(max)和varbinary(max)数据类型。

所以问题仍然存在。

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

  

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

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

2 个答案:

答案 0 :(得分:0)

您是正确的,没有任何配置能够像旧的“ TEXT_IN_ROW”一样。

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

答案 1 :(得分:0)

  

所以,如果我们有一个varchar(max)字段,我们应该怎么做?   最多不能超过16个字符?

CREATE TABLE dbo.T1 (SomeCol VARCHAR(MAX) CHECK (LEN(SomeCol)<=16));