sql >> Base de Datos >  >> RDS >> Sqlserver

SQL Server 2012:datos XML jerárquicos:caracteres de escape

Tus problemas:

  1. Intenta usar la salida de SelectChild , que es de tipo XML, como el contenido del atributo @ListDirectChildren . No puede usar XML en este lugar, por lo tanto, se maneja (y escapa) como texto normal. ¿Está intentando crear una especie de lista recursiva de niños?

  2. En su consulta externa, envía el XML a VARCHAR(MAX) (por cierto:usa siempre NVARCHAR en relación con XML). Una vez más, obligará al motor a tratar este texto como texto y, por lo tanto, escapar de él.

  3. Intenta agregar la cadena "null" para expresar la falta de un valor. Pero XML funciona de manera diferente:a. El elemento falta en el XML por completo:consultarlo devolverá NULL , está bien.

    b. Para algunas reglas, el elemento debe estar allí, pero debe estar vacío:
    <ListDirectChildren></ListDirectChildren> o <ListDirectChildren /> (que significa exactamente lo mismo). Consulta el text() del nodo y obtienes NULL , eso también está bien.

    C. Para algunas reglas, desea marcar el elemento como NULL . Utilice XSINIL

Prueba esto para variaciones de empty y 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

El resultado:

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

Prueba esto para XSINIL

SELECT NULL AS test FOR XML RAW, ELEMENTS XSINIL

para conseguir esto

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

Mi sugerencia:

Esta pregunta

es de esperar que se solucione. Inicie una nueva pregunta en la que agregue más datos a su escenario de muestra para reflejar varios niños, coloque un enlace a esta pregunta e indique el resultado esperado (cómo debería verse el XML).