【发布时间】:2010-12-28 17:11:08
【问题描述】:
我们其中一个数据库的用户正尝试向 SQL Server 2005 数据库提交 UPDATE 查询,但文本被意外截断。
被截断的字段是 VARBINARY(MAX),用于存储 HTML 文本。
查询大致是:
UPDATE Story
SET mainText = CONVERT (VARBINARY (MAX), '[...5000 chars of text...]'
+ char(47) + char(47)
+ '[...3000 chars of text...]'
+ char(47) + char(47)
+ '[...5000 chars of text...]')
WHERE storyId = 123456
经过一些实验,我发现当我删除字符串连接时,查询按预期工作,并且字段不会被截断。
我能够解决限制并通过将 CAST 中的每个单独字符串包装到 VARCHAR(MAX) 来保持连接,因此如果用户认为需要使用 char(),则可以选择。
我认为正在发生的事情是,每当使用连接运算符时,VARCHAR 都会发生隐式转换,并且隐式转换似乎仅限于 VARCHAR(8000) 而不是 VARCHAR(MAX )。因此,在字符串被发送到 CONVERT 函数之前,它已经被截断为 8000 个字符。
如果我是正确的,有没有办法改变这种行为?
如果没有办法改变行为,除了CAST还有其他方法可以解决这个问题吗?
【问题讨论】:
-
你为什么用
VARBINARY(MAX)来存储HTML?? VARCHAR(MAX) 将是更明显和合乎逻辑的选择... -
旧版数据库。不知道为什么会做出这样的选择。正在雷达上研究正在发生的事情。
标签: sql-server-2005 tsql