0

我有一个非常长的 xml 行,它有 > 800000 个字符。“客户端”也是“服务器”。操作系统是 windows 2k8 x64。数据库和客户端一样有足够的内存。

问题是,一旦我达到了一些神奇的字符数——恰好是 43679 个 xml 字符——该行将返回 APPEARS 是什么。我称它们为“xml chars”,因为 sql server 在计算长度时显然会删除任何空格 - 我用这个 sql 执行此操作: len(convert(varchar(max), xsl)) 为什么数字是 43679 也让我感到困惑...

外面有人有这个问题吗?实际上,我已经使用 Windows 2k3 和另一台 Windows 2k8 服务器连接到同一台服务器,并且除了这台机器(实际服务器本身)之外的任何其他机器上都没有问题。

我还找到了查询结果-> sql server-> results to grid,并将 xml 的限制设置为“无限”,但它似乎仍然没有“工作”......(那些工作的将这个设置为 2mb供参考)

感谢您的任何和所有评论 - 我会尝试任何事情......它不会阻止任何工作 - 我确信这只是一个客户,但它让我发疯了!:)

更新:仅供参考-问题不在于转换-我实际上不想转换它。我在此示例中使用 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 行,在“网格”中,我得到了一个很好的 xml 小超链接,当我单击它时,会在新选项卡中显示“完整 xml”。但是对我来说……一旦我通过了这个奇怪的魔术数字,它就会停止这样做,并且看起来很空白。

4

2 回答 2

0

我认为这是因为您<?xml version="1.0" encoding="UTF-16"?>的 XML 开头没有。

于 2009-01-23T20:06:26.500 回答
0

我认为您有两个不同的问题:

  1. SSMS 行为
  2. xml转换

SSMS 行为

尝试 bcp 转储到文件中,看看你得到了什么。这样你就绕过了 SSMS,这很奇怪。

或转换为 varchar(max) 以便 SSMS 将其视为 LOB 数据(但请参阅下一个信息)

xml 转换 43679 可能是由转换为 varchar(max) 引起的。请参阅CAST AND CONVERT和 CONVERT for XML 的样式参数。默认样式“丢弃无关紧要的空白”并且您没有上述样式。

我认为 SSMS 基于具有正确 CONVERT 的列应用非 LOB 数据的最大长度(65535),但显示它时没有空格。因此出现差异。

于 2009-01-08T05:56:01.860 回答