sql >> Database teknologi >  >> RDS >> Sqlserver

SQL Server 2012:Hierarkiske XML-data - escape-tegn

Dine problemer:

  1. Du prøver at bruge outputtet fra SelectChild , som er af typen XML, som indholdet af attributten @ListDirectChildren . Du kan ikke bruge XML på dette sted, derfor håndteres (og escaped) som normal tekst. Forsøger du at oprette en slags rekursiv underordnet liste?

  2. I din ydre forespørgsel caster du XML til VARCHAR(MAX) (btw:brug altid NVARCHAR i forbindelse med XML). Igen vil du tvinge motoren til at behandle denne tekst som tekst og derfor undslippe den.

  3. Du forsøger at tilføje strengen "null" for at udtrykke den manglende værdi. Men XML fungerer anderledes:a. Elementet mangler fuldstændigt i XML:Hvis du forespørger på det, returneres NULL , det er fint.

    b. For nogle regler skal Elementet være der, men skal være tomt:
    <ListDirectChildren></ListDirectChildren> eller <ListDirectChildren /> (hvilket betyder nøjagtig det samme). Forespørg nodens text() og du får NULL , det er også fint.

    c. For nogle regler vil du markere elementet som NULL . Brug XSINIL

Prøv dette for varianter af empty og 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

Resultatet:

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

Prøv dette for XSINIL

SELECT NULL AS test FOR XML RAW, ELEMENTS XSINIL

for at få dette

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

Mit forslag:

Dette spørgsmål

er forhåbentlig løst. Start et nyt spørgsmål, hvor du tilføjer nogle flere data til dit eksempelscenarie for at afspejle flere børn, placer et link til dette spørgsmål og angiv det forventede output (hvordan XML skal se ud).




  1. GROUP_CONCAT i IN-underforespørgsel

  2. Fejl:Udfyld:SelectCommand.Connection-egenskaben er ikke blevet initialiseret.

  3. Doctrine 2 QueryBuilder tilføje flere udvalgte elementer /parametre?

  4. Hvordan kan jeg tilføje indledende nuller til datoer i Oracle?