Qlikview SQL:检索 Xml 列作为数据
Qlikview SQL: Retrieving Xml columns as data
我在 SQL 服务器中有一个带有 table 'Reports' 的数据库。其中 table 是一个名为 '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:Microsoft OLE DB Provider for SQL Server,ErrorMsg:XMLDT 方法 'nodes' 只能在 'nodes' 类型的列上调用=29=].
使用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);
我在 SQL 服务器中有一个带有 table 'Reports' 的数据库。其中 table 是一个名为 '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:Microsoft OLE DB Provider for SQL Server,ErrorMsg:XMLDT 方法 'nodes' 只能在 'nodes' 类型的列上调用=29=].
使用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);