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

Nos*_*aru 5 xml sql xml-parsing

我试图从MS-SQL Server 2008数据库中提取四条信息,该数据库存储在单个XML字段中.这是我第一次使用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>
Run Code Online (Sandbox Code Playgroud)

因此,在此示例中,我需要使用"利润中心"值"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
Run Code Online (Sandbox Code Playgroud)

这是我工作的一个项目,需要能够超越这个.通常我会学习XML来解决这个问题,但时间不允许这样.在我有机会学习XML之前,我将不胜感激.

Fra*_*kPl 4

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

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

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

第一个参数是 XPath 1 表达式,第二个参数是目标数据类型。请注意,这些字符串必须是 SQL Server 中的固定字符串,并且不能通过字符串连接等方式动态构建。