字符串或二进制数据将在varchar(max)上被截断

时间:2013-09-18 09:10:54

标签: sql-server-2008 tsql varcharmax

我已经检查过,每个人似乎都遇到了列长太小的问题。我不认为这是我的问题,因为一切都是varchar max。

我有一个大文本字符串存储在列

Select  len(templateDocument) from TemplateDocument
This Returns 5142610

我正在尝试用新文本替换旧文本并遇到这个问题

UPDATE TemplateDocument
SET templateDocument = REPLACE(templateDocument, @BookmarkOldText, @BookmarkNewText)

这是我的错误被抛出的地方。

我的NewText长度为12067,旧文本为14279.看到我的新文本少于我的新文本,它应该适合并且不应该抛出错误。我甚至可以将varchar(max)中的当前文本加倍,这很合适。

    declare @fullItem varchar(max)
    SELECT @fullItem = templateDocument from TemplateDocument 
    SET @fullItem = @fullItem + ' ' + @fullItem
    Select LEN(@fullItem)
    This Returns 10285221

哪个好,它仍然适合数据类型,然后进入列。

所以我的问题是为什么在替换上它会说会有截断?看起来数据类型足够大,可以将整个文档存储两次。替换功能是否有尺寸限制?如果是这样,有没有更好的方法来解决这个问题?

1 个答案:

答案 0 :(得分:0)

问题可能是VARCHAR(MAX),它有能力存储8000长度

了解更多详情,请查看

http://msdn.microsoft.com/en-us/library/ms176089.aspx