SQL查询 - 查询XML,遇到问题

时间:2014-06-30 20:08:16

标签: sql xml

我正在开发一个项目,需要一些帮助才能让这个XML查询正常工作。我试图在SQL中查询下面的XML作为新列"公司"与公司价值观。

列名是CustomData并且是varchar(3000)所以看起来它需要转换为XML,除非有另一种方法可以做到这一点。

<?xml version="1.0" encoding="UTF-8"?>
<ArrayOfCustomData xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <CustomData name="Company" value="WT001" />
   <CustomData name="Location" value="123456" />
   <CustomData name="DealerCode" value="WT" />
   <CustomData name="Domain" value="WT" />
   <CustomData name="Region" value="1234" />
</ArrayOfCustomData>

这是我使用的SQL代码。

select CustomData.value('(/ArrayOfCustomData/CustomData name="Company")[1]','varchar(30)') as Company
from tbl_User_Ref

我收到此错误:

  

&#34;找不到任何一列&#34; CustomData&#34;或用户定义的函数或聚合&#34; CustomData.value&#34;,或名称不明确。&#34;

感谢任何帮助。

谢谢!

3 个答案:

答案 0 :(得分:2)

您的XPath无效,请尝试以这种方式:

select 
    CustomData.value('(/ArrayOfCustomData/CustomData[@name="Company"]/@value)[1]','varchar(30)') as Company
from tbl_User_Ref

注意在属性名称的开头使用@来解决XML属性,并使用方括号([....])中的表达式来过滤XML数据(以过滤{{1 } <CustomData>属性的值是特定的。)

更新:

如果您使用的是SQL Server,则可以使用name函数将列转换为XML类型,例如:

CAST()

SQL Fiddle demo

使用CTE的另一种方法:Select XML from varchar(max) column

答案 1 :(得分:1)

我设法通过使用下面的代码使其工作。不知道为什么,但看起来我的XML实际上是UTF-16而不是UTF-8,这可能也给我带来了问题。谢谢你的帮助。

CAST(CAST(CustomData AS NTEXT) AS XML).value('(/ArrayOfCustomData/CustomData[@name="Company"]/@value)[1]','varchar(3000)') as Company

答案 2 :(得分:-1)

DECLARE @DocHandle int

DECLARE @XmlDocument nvarchar(1000)

SET @XmlDocument = N&#39;请填写您的查询(XML)&#39;

EXEC sp_xml_preparedocument @DocHandle OUTPUT,@ XMLDocument

SELECT * 来自OPENXML(@DocHandle,&#39; / ArrayOfCustomData / CustomData&#39;,1)       WITH(名称varchar(10),             value varchar(20))

EXEC sp_xml_removedocument @DocHandle