我有一个非常长的xml行,它有> 800000个字符。 '客户'也是'服务器'。操作系统是Windows 2k8 x64。数据库拥有足够的内存和客户端。
问题是,一旦我击中了一些神奇的字符数 - 恰好是43679 xml字符 - 该行将返回显示的内容。我称之为'xml chars',因为当计算长度时,任何空格显然被sql server剥离 - 我用这个sql做的:len(转换(varchar(max),xsl))为什么数字是43679也让我感到困惑......
那里有人有这个问题吗?我实际上使用Windows 2k3和另一台Windows 2k8服务器连接到同一台服务器,并且除此之外的任何其他机器上没有问题(实际的服务器本身)。
我还找到了查询结果 - > sql server - >结果到网格并将xml的限制设置为'无限'但它似乎仍然不是'工作'...(有效的设置为2mb fyi)
感谢任何和所有评论 - 我会尝试任何事情......它不会阻止任何工作 - 我确定这只是这一个客户但是它让我疯了! :)
更新:仅供参考 - 问题不在于转换 - 我实际上并不想转换它。我在这个例子中使用convert的唯一原因是使用len(len对xml数据类型不起作用)所以我可以找到xml的“长”。
问题是这个......
INSERT INTO someTableForXml(theXml)
VALUES ('<this><is><some><really>long xml</really></some></is></this>')
现在复制并粘贴它,直到你有大约100,000行xml并插入它...当我使用以下选择行:
SELECT * FROM someTableForXml
我回到了1行,在'grid'中我得到了一个很好的xml小超链接,当我点击它时,在新标签中显示“full xml”。然而对于我...一旦我通过这个奇怪的幻数它停止这样做,只是看起来空白。
答案 0 :(得分:0)
我认为你有两个不同的问题:
SSMS行为
尝试将bcp转储到文件中,看看你得到了什么。 通过这种方式,您可以绕过SSMS,这很奇怪。
或CONVERT到varchar(max)所以SSMS将其视为LOB数据(但请参阅下一个信息)
xml转换 43679可能是由转换为varchar(max)引起的。 请参阅CAST AND CONVERT和CONVERT for XML的样式参数。 默认样式“丢弃无关紧要的空白区域”并且您没有上面的样式。
我认为SSMS正在应用基于具有正确CONVERT的列的非LOB数据的最大长度(65535),但是在没有空格的情况下显示它。因此存在差异。
答案 1 :(得分:0)
我认为是因为你在XML的开头没有<?xml version="1.0" encoding="UTF-16"?>
。