Qlikview SQL:检索Xml列作为数据

时间:2015-08-06 09:40:57

标签: sql sql-server xml qlikview

我在SQL Server中有一个包含“Reports”表的数据库。在该表中有一个名为“Snippet”的列。此列的类型为XML。 我现在想要使用该XML列中的数据。我到目前为止尝试的代码是:

SQL SELECT
T.ref.value ('Name[1]', 'varchar(50)') as Name,
T.ref.value ('Temperature[1]', 'varchar(50)') as Temperature
FROM rLoyalty.[dbo].[Reports] CROSS APPLY xml.nodes ('/HARDWARE_INFO/CPU_INFO/CORE') as T(ref);

我的xml文件如下所示:

<HARDWARE_INFO>
  <CPU_INFO>
    <CORE>
      <NAME>CPU Core #1</NAME>
      <TEMPERATURE>59</TEMPERATURE>
    </CORE>
    <CORE>
      <NAME>CPU Core #2</NAME>
      <TEMPERATURE>58</TEMPERATURE>
    </CORE>
    <CORE>
      <NAME>CPU Package</NAME>
      <TEMPERATURE>59</TEMPERATURE>
    </CORE>
  </CPU_INFO>
</HARDWARE_INFO>

但是这给了我错误:ErrorSource:用于SQL Server的Microsoft OLE DB提供程序,ErrorMsg:XMLDT方法'nodes'只能在xml类型的列上调用。

1 个答案:

答案 0 :(得分:2)

使用Snippet.nodes代替xml.nodes

Snippet是数据类型xml

的列名

您在此XML列上使用nodes方法。

xml.nodes并不意味着什么,因为(据我所知)您没有名为xml

的列

这将是最终的代码

SELECT
T.ref.value ('Name[1]', 'varchar(50)') as Name,
T.ref.value ('Temperature[1]', 'varchar(50)') as Temperature
FROM rLoyalty.[dbo].[Reports] 
CROSS APPLY 
Snippet.nodes ('/HARDWARE_INFO/CPU_INFO/CORE') as T(ref);