使用SQL从XML中提取相关数据
我以前没有在这里问过任何问题,所以请容忍我 我需要使用存储在数据库字段中的SQL提取一些XML。我以前从来没有这样做过,所以我在这里使用了各种不同的问题来达到这个目的。然而,数据的结构方式似乎无法提取我需要的内容 XML的格式与下面的类似(我简化并重命名了标记,我无法控制XML或数据库结构) 我用过这个方法使用SQL从XML中提取相关数据,sql,Sql,我以前没有在这里问过任何问题,所以请容忍我 我需要使用存储在数据库字段中的SQL提取一些XML。我以前从来没有这样做过,所以我在这里使用了各种不同的问题来达到这个目的。然而,数据的结构方式似乎无法提取我需要的内容 XML的格式与下面的类似(我简化并重命名了标记,我无法控制XML或数据库结构) 我用过这个方法 SELECT DISTINCT ID , i.c.value(‘(//wf:accholderdetails/wf:starddate/text()[1]’,’varcha
SELECT DISTINCT
ID
, i.c.value(‘(//wf:accholderdetails/wf:starddate/text()[1]’,’varchar(100)’) as startdate
, i.c.value (‘(//wf:accdetails/wf:balance/text())[1]’,’varchar(100)’) as balance
FROM
TABLE T
CROSS APPLY RESULT.nodes(‘//wf:acc’) as i(c)
WHERE
ID = ‘’
它返回一行相关数据,就像我想要的一样,但只返回第一行,不返回任何其他数据行
何处为
SELECT DISTINCT
ID
, i.c.value(‘(wf:balance/text())[1]’,’varchar(100)’) as balance
,j.c.value(‘(wf:startdate/text())[1]’,’varchar(100)’) as startdate
FROM
TABLE t
CROSS APPLY RESULT.nodes(‘//wf:accdetails’) as i(c)
CROSS APPLY RESULT.nodes(‘//wf:accholder’) as j(c)
WHERE
ID = ‘’
返回所有数据行,但复制每个项目,从而无法区分哪些数据与哪个帐户相关
非常感谢您的帮助!如果你需要进一步的澄清,让我知道。提前谢谢你 这应该让你开始了
SELECT
i.c.query('(./accholder/startdate/text())') as startdate
,i.c.query ('(./accdetails/balance/text())') as 'default.bal'
,i.c.query ('(./delinquent/bal/text())') as 'delinquent.bal'
,COALESCE(convert(varchar(10), i.c.query('data(./acchistory/ah/@code)')),'') as 'acchistory.ah.code'
FROM
@myxml.nodes('//acc') as i(c)
它返回:
09/10/15 90 123 a s
这应该让你开始
SELECT
i.c.query('(./accholder/startdate/text())') as startdate
,i.c.query ('(./accdetails/balance/text())') as 'default.bal'
,i.c.query ('(./delinquent/bal/text())') as 'delinquent.bal'
,COALESCE(convert(varchar(10), i.c.query('data(./acchistory/ah/@code)')),'') as 'acchistory.ah.code'
FROM
@myxml.nodes('//acc') as i(c)
它返回:
09/10/15 90 123 a s
是MS SQL Server吗?
ID
来自哪里?表中是否还有其他列包含XML数据?表的结构是什么?您使用的是哪些DBMS?MS SQL Server。Microsoft Management Studio.ID包含在表中,但未存储为XML。它是否适用于MS SQL Server?ID从何而来?表中是否还有其他列包含XML数据?表的结构是什么?您使用的是哪些DBMS?MS SQL Server。Microsoft Management Studio.ID包含在表中,但未存储为XML。很抱歉,答复太晚。我设法用你的答案作为获得我想要的结果的起点。谢谢:)很抱歉回复晚了。我设法用你的答案作为获得我想要的结果的起点。谢谢:)