使用SQL Server“ FOR XML”:将结果数据类型转换为Text / varchar / string会怎样?

问题描述

| 我已经为此苦了将近一个星期,但仍然没有找到任何解决方案-.- 我的目标是通过使用\“ FOR XML \”语句进行查询来从sql Server接收XML,并将该XML作为字符串/流以转发到XSLT Transformer,并将结果显示为HTML。 可怜的是我应该使用的Web服务器环境:IBM Domino 8.5.2,通常使用Lotus Script和Lotus Notes数据库生成网站。 但是现在,当谈论大型数据库(如我们的网站点统计信息)时,Notes数据库性能已经达到了死胡同,该数据库将数百万的点击数存储为数据集。因此,我们决定迁移到可以更快提供自定义过滤结果的mssql2008服务器。 我实际上确实设法建立了与sql Server的连接,提交了一个查询,并将结果作为xml。但现在? :)看来,sql Server提供了他的“ for xml”查询结果,这是一种自己的二进制编码字符的奇怪数据类型,在打印它们或保存到文件时毫无意义。而且Lotus Script(几乎是VBScript)似乎没有可能处理该xml数据类型。 我尽一切可能找到结果-Lotus内置ODBC类,通过OleDB的LCConnection,通过OleDB的ADO Connection ...,但是每次尝试都以一堆不可读的数据结尾。 我可以想象在Domino和sql Server之间使用Web服务,将数据作为字符串准备好用于Domino脚本,但是我想避免不必要的开销。 您能否在sql语句中告诉您希望所得的xml是什么数据类型?就像字段的cast()/ convert()一样,但是对于整个xml结果呢?这样我就可以将结果读取为text / varchar字段? 克里斯(Thx)     

解决方法

我知道我之前曾经做过这样的事情,而我想这就是你要做的事情:
SELECT CAST((SELECT [Columns] FROM [Tables] FOR XML PATH(\'\')) AS VARCHAR(MAX)) AS XmlData
这将吐出您所生成的XML作为Lotus Notes可以很好接受的文本数据。 编辑:如果需要以另一种样式生成XML,则可以将
FOR XML PATH(\'\')
更改为
FOR XML AUTO
。