Sql server MS SQL Server-OpenXML-多元素

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

XML示例:

<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