我正在开发一个项目,需要一些帮助才能让这个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;
感谢任何帮助。
谢谢!
答案 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()
使用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