我在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类型的列上调用。
答案 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);