任何隐藏的陷阱将列从varchar(8000)更改为varchar(max)?

KM.*_*KM. 10 t-sql sql-server sql-server-2005

我有很多(超过一千个地方)的遗留T-SQL代码只能在实用程序表中INSERTvarchar(8000)列中.我们的需求已经改变,现在该列需要能够处理更大的值.因此,我需要制作该专栏varchar(max).这只是一个普通的数据列,其中没有执行搜索,没有索引,只有一个过程读取它,它是INSERT忘记应用程序(几乎像一个日志条目).

我计划仅在几个实际生成较大数据的地方进行更改,并在处理此列的单个存储过程中进行更改.

  • 是否有任何隐藏的陷阱将列更改varchar(8000)varchar(max)
  • 将所有的T-SQL字符串函数的工作方式相同,LEN(),RTRIM(),SUBSTRING(),等.
  • 任何人都可以想象为什么我必须对认为列仍然存在的代码进行任何更改varchar(8000)

Rem*_*anu 6

  • 所有MAX类型都具有较小的性能损失,请参阅varchar(max)与varchar(N)的性能比较.
  • 如果您的维护包括在线操作(在线索引重建),您将无法执行这些操作.具有BLOB列的表不支持在线操作:
    • 聚簇索引必须创建,重建或删除脱机当底层表包含大对象(LOB)数据类型:图像,NTEXT,文字,varchar(max),为nvarchar(最大),VARBINARY(max)和XML.
    • 当表包含LOB数据类型时,可以在线创建非唯一非聚簇索引,但这些列在索引定义中均不用作键或非键(包含)列.必须在脱机时创建或重建使用LOB数据类型列定义的非聚簇索引.

性能损失真的很小,所以我不担心.对于真正热门的必须在线操作表而言,失去进行在线重建的能力可能会有问题.除非必须进行在线操作,否则我会投票支持并将其更改为MAX.