【问题标题】:selecting xml from sql server 2005 (row shows up as null)从 sql server 2005 中选择 xml(行显示为空)
【发布时间】:2009-01-08 02:18:28
【问题描述】:

我有一个非常长的 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(仅供参考)

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

更新:仅供参考 - 问题不在于转换 - 我实际上不想转换它。我在此示例中使用 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”。但是对我来说......一旦我通过了这个奇怪的魔法数字,它就会停止这样做,并且看起来只是空白。

【问题讨论】:

    标签: xml sql-server-2005 ssms


    【解决方案1】:

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

    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),但显示它时没有空格。因此存在差异。

    【讨论】:

    • 感谢您的宝贵时间。谢谢。遗憾的是,我认为这无关紧要,所以我已经更详细地更新了原始问题。
    【解决方案2】:

    我认为这是因为您的 XML 开头没有 &lt;?xml version="1.0" encoding="UTF-16"?&gt;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-23
      • 2012-08-15
      • 1970-01-01
      • 1970-01-01
      • 2010-09-24
      • 2011-03-08
      • 2017-10-07
      • 1970-01-01
      相关资源
      最近更新 更多