Sql server MS SQL Server-OpenXML-多元素
XML示例:Sql server MS SQL Server-OpenXML-多元素,sql-server,xml,openxml,sql-server-openxml,Sql Server,Xml,Openxml,Sql Server Openxml,XML示例: <POLICY> <RISKS> <RISK> <DRV>1</DRV> </RISK> <RISK> <DRV>2</DRV> </RISK> </RISKS> </POLICY> 预期: 1. <RIS
<POLICY>
<RISKS>
<RISK>
<DRV>1</DRV>
</RISK>
<RISK>
<DRV>2</DRV>
</RISK>
</RISKS>
</POLICY>
预期:
1. <RISK><DRV>1</DRV></RISK>
2. <RISK><DRV>2</DRV></RISK>
SELECT DRV
FROM OPENXML(@hDOC, 'POLICY/RISKS/RISK', 2)
WITH(
DRV XML 'DRV'
) AS Z
结果:
1. <DRV>1</DRV>
2. <DRV>2</DRV>
1。1.
2.2.
因此,问题是如何获得两个风险行?为什么不使用SQL Server提供的本机
XQuery
支持OpenXML
很旧,存在很多问题
您可以使用XQuery
Support编写如下查询
DECLARE @hDOC xml
SET @hDOC='<POLICY>
<RISKS>
<RISK>
<DRV>1</DRV>
</RISK>
<RISK>
<DRV>2</DRV>
</RISK>
</RISKS>
</POLICY>'
SELECT T.c.query('.') AS result
FROM @hDOC.nodes('/POLICY/RISKS/RISK') T(c)
GO
您将获得所需的输出。谢谢您的回复。在用OpenXML实现的项目中,我有很多已经存在的代码,我只是不想用XQuery实现这一部分。谢谢
1. <DRV>1</DRV>
2. <DRV>2</DRV>
DECLARE @hDOC xml
SET @hDOC='<POLICY>
<RISKS>
<RISK>
<DRV>1</DRV>
</RISK>
<RISK>
<DRV>2</DRV>
</RISK>
</RISKS>
</POLICY>'
SELECT T.c.query('.') AS result
FROM @hDOC.nodes('/POLICY/RISKS/RISK') T(c)
GO
1. <RISK><DRV>1</DRV></RISK>
2. <RISK><DRV>2</DRV></RISK>
DECLARE @DocHandle int
DECLARE @hDOC VARCHAR(1000)
SET @hDOC=N'<POLICY>
<RISKS>
<RISK>
<DRV>1</DRV>
</RISK>
<RISK>
<DRV>2</DRV>
</RISK>
</RISKS>
</POLICY>'
EXEC sp_xml_preparedocument @DocHandle OUTPUT, @hDOC
SELECT RISK
FROM OPENXML(@DocHandle, 'POLICY/RISKS/RISK', 2)
WITH(
RISK XML '.'
) AS Z
EXEC sp_xml_removedocument @DocHandle