2017-02-06 8 views
2

Я только хочу показать узел categoryid и значение, если оно не пустое guid. Я пробовал разные форматы, но ничего не получилось. Он просто печатает оператор if в виде строки в результатах. Я читал, что вам нужно иметь условие else как часть вашего кода, могу ли я просто положить пустой string? Я просмотрел несколько статей в Интернете об этом и ссылку msdn без везения. По какой-то причине он оценивает мой оператор if.Условный xml в sql

declare @XML xml = N' 
<books> 
    <book> 
     <title>Book 1</title> 
     <categoryid>00000000-0000-0000-0000-000000000000</categoryid> 
     <author>Chris</author> 
     <price>10</price> 
    </book> 
    <book> 
     <title>Book 2</title> 
     <categoryid>DF3D696D-B7A3-44A2-BC7D-1D45745C979B</categoryid> 
     <author>Spencer</author> 
     <price>20</price> 
    </book> 
</books>'; 


select @XML.query(
'<books> 
    { 
     for $b in /books/book 
      return 
      <book> 
       {$b/title} 
       {$b/price} 
       if(not($b/categoryid = 00000000-0000-0000-0000-000000000000)) 
        then {$b/categoryid} 
       else 

      </book> 
    } 
</books>' 
); 

ответ

2

Я думаю, что было два вопроса.

1 - условный блок должен быть заключен в фигурные скобки перед «if» и после «else» закончился.

2 - Пустое значение направляющей должно быть его собственной переменной - я думаю, что в условии, что он рассматривал его как строку.

У меня также возникла проблема с тем, чтобы оператор «не» работал должным образом, поэтому я просто изменил условие на обход этой проблемы.

declare @XML xml = N' 
<books> 
    <book> 
     <title>Book 1</title> 
     <categoryid>00000000-0000-0000-0000-000000000000</categoryid> 
     <author>Chris</author> 
     <price>10</price> 
    </book> 
    <book> 
     <title>Book 2</title> 
     <categoryid>DF3D696D-B7A3-44A2-BC7D-1D45745C979B</categoryid> 
     <author>Spencer</author> 
     <price>20</price> 
    </book> 
</books>'; 

declare @emptyguid uniqueidentifier = '00000000-0000-0000-0000-000000000000' 

select @XML.query(' 
<books> 
    { 
    for $b in /books/book 
    return 
     <book> 
     {$b/title} 
     {$b/price} 
     { 
      if($b/categoryid = sql:variable("@emptyguid")) then 
      () 
      else (
      $b/categoryid 
     ) 
     } 
     </book> 
    } 
</books> 
'); 

 Смежные вопросы

  • Нет связанных вопросов^_^