Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SQL Server 2012:Йерархични XML данни - екраниращи знаци

Вашите проблеми:

  1. Опитвате се да използвате изхода на SelectChild , който е от тип XML, като съдържание на атрибута @ListDirectChildren . Не можете да използвате XML на това място, следователно той се обработва (и екранира) като нормален текст. Опитвате ли се да създадете вид рекурсивен дъщерен списък?

  2. Във вашата външна заявка прехвърляте XML към VARCHAR(MAX) (между другото:използвайте винаги NVARCHAR във връзка с XML). Отново ще принудите двигателя да третира този текст като текст и следователно да го екранира.

  3. Опитвате се да добавите низа "null", за да изразите липсата на стойност. Но XML работи по различен начин:a. Елементът напълно липсва в XML:Запитването му ще върне NULL , това е добре.

    b. За някои правила елементът трябва да е там, но трябва да е празен:
    <ListDirectChildren></ListDirectChildren> или <ListDirectChildren /> (което означава абсолютно същото). Заявете text() на възела и получавате NULL , това също е добре.

    ° С. За някои правила искате да маркирате елемента като 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Премахване на дубликати

  2. Вмъкване на големи обектни данни в Salesforce.com от SQL Server

  3. Съхраняването на големи файлове в база данни причинява изключение от тип „System.OutOfMemoryException“

  4. Извлечете>901 реда от SQL Server 2008 свързан сървър към Active Directory

  5. Изчислете общия брой работни работни дни между две дати