sql >> データベース >  >> RDS >> Sqlserver

SQL Server 2012:階層 XML データ - エスケープ文字

    あなたの問題:

    <オール> <リ>

    SelectChild の出力を使用しようとしています content としての XML タイプの 。 属性 @ListDirectChildren の .この場所では XML を使用できないため、通常のテキストとして処理 (およびエスケープ) されます。 一種の再帰的な子リストを作成しようとしていますか?

    <リ>

    外側のクエリで、XML を VARCHAR(MAX) にキャストします (ところで:常に NVARCHAR を使用してください XML に関連して)。ここでも、エンジンがこのテキストをテキストとして処理するよう強制し、エスケープします。

    <リ>

    値が欠落していることを表すために、文字列「null」を追加しようとしています。ただし、XML の動作は異なります。要素が XML に完全にありません:クエリを実行すると NULL が返されます 、それでいいです。

    b.一部のルールでは、要素が存在する必要がありますが、空である必要があります:
    <ListDirectChildren></ListDirectChildren> または <ListDirectChildren /> (まったく同じ意味です)。ノードの text() を照会します NULL を取得します 、それも結構です。

    c.一部のルールでは、要素を NULL としてマークする必要があります . XSINIL を使用する

    empty のバリエーションでこれを試してください および null :

    DECLARE @x XML=
    '<root>
       <testempty1 />
       <testempty2></testempty2>
     </root>';
    
    SELECT @x.value('(/root/testempty1)[1]','nvarchar(max)') AS testempty1_Content
          ,@x.value('(/root/testempty1/text())[1]','nvarchar(max)') AS testempty1_Text
          ,@x.value('(/root/testempty2)[1]','nvarchar(max)') AS testempty2_Content
          ,@x.value('(/root/testempty2/text())[1]','nvarchar(max)') AS testempty2_Text
          ,@x.value('(/root/NotExistingElement)[1]','nvarchar(max)') AS NotExistingElement_Content
          ,@x.value('(/root/NotExistingElement/text())[1]','nvarchar(max)') AS NotExistingElement_Text
    

    結果:

                       Content  Text
    testempty1         ""       NULL
    testempty2         ""       NULL
    NotExistingElement NULL     NULL
    

    XSINIL でこれを試してください

    SELECT NULL AS test FOR XML RAW, ELEMENTS XSINIL
    

    これを入手する

    <row xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <test xsi:nil="true" />
    </row>
    

    私の提案:

    この質問

    うまくいけば解決されます。サンプル シナリオにデータを追加して複数の子を反映する新しい質問を開始し、この質問へのリンクを配置して、予想される出力 (XML がどのように見えるか) を述べてください。




    1. SQLDeveloperでシーケンストリガーからPKを作成する方法を学ぶ

    2. JavaからPL/SQLに配列を返す方法は?

    3. トリガーエラーに対してPDO例外がスローされない

    4. OracleRACネットワークおよびIP情報の確認