在SQL Server 2005中,如何在保留文档顺序的同时将XML节点存储在表中?

时间:2013-01-10 17:33:24

标签: sql-server tsql sql-server-2005 sql-server-openxml

我有一个xml文件,其中节点的排序很重要,如下所示:

<Queue>
  <User name="Bob"/>
  <User name="Jane"/>
  <User name="Douglas"/>
  <User name="Samantha"/>
</Queue>

我正在使用OPENXML将这些节点存储在表变量中。当我插入表变量时,如何确保保留节点顺序?

注意,我使用的是OPENXML而不是xquery,所以这不是重复:Finding node order in XML document in SQL server

1 个答案:

答案 0 :(得分:1)

我目前正在做以下事情,依靠'mp:id'来提供订购。

DECLARE @xmltext NVARCHAR(MAX)
SET @xmltext = 
N'
<Queue>
  <User name="Bob"/>
  <User name="Jane"/>
  <User name="Douglas"/>
  <User name="Samantha"/>
</Queue>';

DECLARE @xmlObjectHandler INT;
    -- Set up XML and the appropriate namespace(s) we'll be using
EXEC sp_xml_preparedocument @xmlObjectHandler OUTPUT, @xmltext;

DECLARE @TUserQueue TABLE (
    Ordinal INT IDENTITY(1,1),
    UserName NVARCHAR(200)
)

INSERT INTO @TUserQueue
SELECT 
    UserName
FROM
    OPENXML(@xmlObjectHandler, '/Queue/User')   
    WITH (
        NodeId INT '@mp:id',
        UserName NVARCHAR(200) '@name'
    ) AS users
ORDER BY users.NodeId;

SELECT * FROM @TUserQueue