从sql server 2005中选择xml(行显示为null)

时间:2009-01-08 02:18:29

标签: xml sql-server-2005 ssms

我有一个非常长的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”。然而对于我...一旦我通过这个奇怪的幻数它停止这样做,只是看起来空白。

2 个答案:

答案 0 :(得分:0)

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

  1. SSMS行为
  2. xml comversion
  3. 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"?>