我试图从存储在单个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之前,我将不胜感激。
您可以使用valueXML列上的函数从XML中提取数据,如下所示:
value
SELECT col.value('(/ArrayOfEntityPropertyOfString/EntityPropertyOfString[Name="Profit Center"]/Value)[1]', 'int') FROM tbl
假设您的表已命名tbl,而XML列已命名col。
tbl
col
第一个参数是XPath 1表达式,第二个参数是目标数据类型。请注意,这些字符串必须是SQL Server中的固定字符串,并且不能动态生成(例如,通过字符串串联)。