如果字符数超过43679,则XML Value方法返回空

沙克尔·米尔扎(Shakeer Mirza)

我在从XML列检索字符串数据时遇到问题。我在xml中有一个包含大量数据的节点。如果我尝试用任何value一种方法获取它,或者用query它给出空字符串(即在xml中等于NULL)。

在调试中,我知道,值方法仅在其中字符小于或等于43679的情况下才检索数据

我读了所有与43679有关的SO问题,这是从SSMS网格复制时SSMS中的错误。但是这里的问题不是SSMS。即使从.Net应用程序调用SP,也遇到同样的问题。

例如:

Declare  @XmlStr XML;

select @XmlStr=
'<Main>
  <Node1>/9j/4gIcSUNDX1BST0ZJTEUAAQEA.. 50000+Charcters ...</Node1>
</Main>';

SELECT @XmlStr.value('(/Main/Node1)[1]','varchar(max)') ;

如果Node1包含以下43679个字符,则表示正在输出。有没有解决的办法?还是我错过了什么?

我正在使用SQL Server 2008R2

Shnugo

您不应该尝试将其作为字符串来获取...其中的值<Node1>base64编码的二进制值。XML.value()将为您隐式重新编码。试试这个

Declare  @XmlStr XML;

select @XmlStr=
'<Main>
  <Node1>/9j/4gIcSUNDX1BST0ZJTEUAAQEA</Node1>
</Main>';

SELECT @XmlStr.value('(/Main/Node1)[1]','varbinary(max)') 
      ,CAST(@XmlStr.value('(/Main/Node1)[1]','varbinary(max)') AS VARCHAR(100));

结果清楚地表明,这是JPEG(以开头FFD8)。的大小VARBINARY(MAX)应足够...

0xFFD8FFE2021C4943435F50524F46494C4500010100    
ÿØÿâICC_PROFILE

(无意义的)转换varchar向我们展示了一些EXIF数据...

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章