0

我在 SQL Server 2005 中遇到了 OPENXML 问题,如果 XML 没有每一层都可用,我将不会得到任何结果。一个例子可以解决我的问题:

所以我们有这样的 XML:

<Connection Name="DEFAULT" />'
    <Branch Name="A_Branch">
        <Leaf Name="A_Leaf.OP" >
             <Property Name="A_Property" />
        </Leaf>
    </Branch>
</Connection>

并将 OPENXML 放入这样的表变量中

INSERT INTO @xmlDataTable
    SELECT *
    FROM OPENXML(@idoc, '/Connection/Branch/Leaf', 2)
        WITH (
              Connection varchar(100) '../../@Name'
            , Branch varchar(100) '../@Name'
            , Leaf varchar(100) '@Name'
            )

这很好用!但是,如果您将此 XML 放入:

<Connection Name="DEFAULT">
</Connection>

然后 OPENXML 什么也不返回,一个空行集。

所以我真的不知道该怎么做才能解决这个问题。我需要考虑这两种情况,以及有分支但没有叶子的情况。有什么想法吗?

4

1 回答 1

2

如果你要求,/Connection/Branch/Leaf那么你将得到你所要求的。您显示的 XML 片段必须返回一个空行集,否则将不正确。如果您想<connection name="DEFAULT"/>退货,请索取/Connection。如果您想<connection name="DEFAULT"><branch name="A_Branch"/></connection>退货,请索取/Connection/Branch。等等等等。

您不能指望数据库以“我找不到您要求的行,但这里有一些您可能会觉得有趣的东西……”之类的方式来处理查询。

如果你想要 /Connection/Branch/Leaf/Connection/Branch/Connection 然后要求,使用多个查询和 UNION。

于 2009-12-04T00:54:16.520 回答