我正在尝试从存储在单个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>
因此,在此示例中,我需要使用“利润中心”值“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之前,我将不胜感激。
答案 0 :(得分:3)
您可以使用XML列上的value
函数从XML中提取数据,如下所示:
SELECT col.value('(/ArrayOfEntityPropertyOfString/EntityPropertyOfString[Name="Profit Center"]/Value)[1]', 'int')
FROM tbl
假设您的表名为tbl
,XML列名为col
。
第一个参数是XPath 1表达式,第二个参数是目标数据类型。请注意,这些字符串必须是SQL Server中的修复字符串,并且不能动态构建e。 G。通过字符串连接。
答案 1 :(得分:3)
以下查询将允许您获取xml内容并将它们以表格格式放置,以便您可以在该表上执行必要的sql操作:
Declare @xmlstring 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>'
select MainDataCenter.Col.value('(Name)[1]','varchar(max)') as Name
,MainDataCenter.Col.value('(Value)[1]','varchar(max)') as Value
from @xmlstring.nodes('/ArrayOfEntityPropertyOfString/EntityPropertyOfString') as MainDataCenter(Col)