sql >> Databáze >  >> RDS >> Sqlserver

SQL Server 2012:Hierarchická data XML – znaky escape

Vaše problémy:

  1. Pokusíte se použít výstup SelectChild , který je typu XML, jako obsah atributu @ListDirectChildren . Na tomto místě nelze použít XML, proto se s ním zachází (a escapuje) jako s normálním textem. Pokoušíte se vytvořit druh rekurzivního podřízeného seznamu?

  2. Ve vnějším dotazu přetypujete XML na VARCHAR(MAX) (mimochodem:vždy používejte NVARCHAR ve spojení s XML). Opět donutíte engine, aby s tímto textem zacházel jako s textem, a proto jej opustí.

  3. Pokusíte se přidat řetězec "null", abyste vyjádřili chybějící hodnotu. Ale XML funguje jinak:a. Prvek v XML chybí úplně:Dotaz na něj vrátí NULL , to je v pořádku.

    b. U některých pravidel musí být prvek uveden, ale měl by být prázdný:
    <ListDirectChildren></ListDirectChildren> nebo <ListDirectChildren /> (což znamená úplně to samé). Dotaz na text() uzlu a dostanete NULL , to je také v pořádku.

    C. U některých pravidel chcete označit prvek jako NULL . Použijte XSINIL

Zkuste to pro varianty empty a 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

Výsledek:

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

Vyzkoušejte to pro XSINIL

SELECT NULL AS test FOR XML RAW, ELEMENTS XSINIL

získat toto

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

Můj návrh:

Tato otázka

je snad vyřešeno. Začněte prosím novou otázku, kde do vzorového scénáře přidáte další data, aby odrážela více dětí, umístěte odkaz na tuto otázku a uveďte očekávaný výstup (jak by měl XML vypadat).




  1. Jak vytvořit pohled MySQL

  2. Instalace Oracle 9i Developer Suite 2.0 na Windows

  3. Import dat CSV do aplikace Rails pomocí něčeho jiného než ID přidružení

  4. Potřebují tabulky MySQL ID?