我一直在读这样的东西:
将在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是默认值。
但是,我们似乎失去了在数据较小时将数据保留在行中的选项。它将全部或全部结束。有没有其他方法可以做到这一点?
答案 0 :(得分:0)
您是正确的,没有任何配置能够像旧的“ TEXT_IN_ROW”一样。
您要么让SQL Server在页面中最多存储8Kb,要么将任何大小的信息存储在行外。
答案 1 :(得分:0)
所以,如果我们有一个varchar(max)字段,我们应该怎么做? 最多不能超过16个字符?
CREATE TABLE dbo.T1 (SomeCol VARCHAR(MAX) CHECK (LEN(SomeCol)<=16));