问题描述
您可以使用value
XML列上的函数从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之前,我将不胜感激。