从MS-SQL Server 2008中的XML字段中提取值

问题描述

您可以使用valueXML列上的函数从XML中提取数据,如下所示:

SELECT col.value('(/ArrayOfEntityPropertyOfString/EntityPropertyOfString[Name="Profit Center"]/Value)[1]', 'int')
FROM tbl

假设您的表已命名tbl,而XML列已命名col

一个参数是XPath 1表达式,第二个参数是目标数据类型。请注意,这些字符串必须是sql Server中的固定字符串,并且不能动态生成(例如,通过字符串串联)。

解决方法

我试图从存储在单个XML字段中的MS-SQL Server
2008数据库中提取四段信息。这是我第一次必须使用XML,所以遇到了一些麻烦,这就是为什么我只有要提取的数据的原因。我曾尝试使用其他帖子来解决我的问题,但显然没有运气。

这四个信息首先是“项目经理”,然后是“值”,第二是“利润中心”,然后是该值。来自“利润中心”的值将用于在两个表之间进行联接。以下是此字段中存储的XML数据的示例。

    <ArrayOfEntityPropertyOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
     xmlns:xsd="http://www.w3.org/2001/XMLSchema">
     <EntityPropertyOfString>
       <Name>Project Manager</Name>
       <Value>DBD</Value>
     </EntityPropertyOfString>
     <EntityPropertyOfString>
       <Name>Profit Center</Name>
       <Value>211</Value>
     </EntityPropertyOfString>
    </ArrayOfEntityPropertyOfString>

因此,在此示例中,我需要使用“ Profit Center”值“ 211”来将两个表全部联接到MS-SQL查询中。该信息表可以称为“
tblProfitCenter”,保存该信息的字段为“ prftData”。

这是一个组合查询,如果“ prftData”中的数据不是XML格式,而是一个常规的整数字段,它包含利润中心ID并执行联接,则将执行相同的工作。

    SELECT md.LName,md.FName,pc.ProfitCenterName
    FROM tblMainDataCenter md
    LEFT OUTER JOIN tblProfitCenter pc ON md.pcID = pc.prftData

这是针对我从事的项目,并且需要能够超越此范围。通常,我会学习XML来解决这个问题,但是时间不允许这样做。在没有机会学习XML之前,我将不胜感激。