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 に答える