Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 FOR XML AUTO убрать пустой уровень при показе  [new]
michael R
Member

Откуда: из-за границы
Сообщений: 2113
SQL 2008

код примерный

DECLARE @t1 TABLE ( id1 INT, Text1 VARCHAR(20))
DECLARE @t2 TABLE ( id2 INT, Text2 VARCHAR(20)) 

INSERT INTO @t1 (id1, Text1)
SELECT 1, 'Text11' UNION ALL
SELECT 2, 'Text12' UNION ALL
SELECT 3, 'Text13' UNION ALL
SELECT 4, 'Text14' 

INSERT INTO @t2 (id2, Text2)
SELECT 1, 'Text21' UNION ALL
SELECT 2, 'Text22' UNION ALL
SELECT 4, 'Text24' 



SELECT 
      LEVEL1.Text1,
      LEVEL2.Text2
FROM @t1 LEVEL1 left outer join @t2 LEVEL2 on LEVEL1.id1=LEVEL2.id2
FOR XML  AUTO , ELEMENTS  ,ROOT('ROOT')


результат
<ROOT>
  <LEVEL1>
    <Text1>Text11</Text1>
    <LEVEL2>
      <Text2>Text21</Text2>
    </LEVEL2>
  </LEVEL1>
  <LEVEL1>
    <Text1>Text12</Text1>
    <LEVEL2>
      <Text2>Text22</Text2>
    </LEVEL2>
  </LEVEL1>
  <LEVEL1>
    <Text1>Text13</Text1>
    [color=red]<LEVEL2 />[/color]
  </LEVEL1>
  <LEVEL1>
    <Text1>Text14</Text1>
    <LEVEL2>
      <Text2>Text24</Text2>
    </LEVEL2>
  </LEVEL1>
</ROOT>


собственно вопрос
можно ли сократить XML и убрать пустой ноде (<LEVEL2 />) при показе ?
без использования операции modify ()
7 дек 15, 14:59    [18524657]     Ответить | Цитировать Сообщить модератору
 Re: FOR XML AUTO убрать пустой уровень при показе  [new]
Konst_One
Member

Откуда:
Сообщений: 11538
вот так подойдёт?
<ROOT>
  <LEVEL>
    <Text1>Text11</Text1>
    <Text2>Text21</Text2>
  </LEVEL>
  <LEVEL>
    <Text1>Text12</Text1>
    <Text2>Text22</Text2>
  </LEVEL>
  <LEVEL>
    <Text1>Text13</Text1>
  </LEVEL>
  <LEVEL>
    <Text1>Text14</Text1>
    <Text2>Text24</Text2>
  </LEVEL>
</ROOT>
7 дек 15, 15:05    [18524698]     Ответить | Цитировать Сообщить модератору
 Re: FOR XML AUTO убрать пустой уровень при показе  [new]
michael R
Member

Откуда: из-за границы
Сообщений: 2113
Konst_One нее

нужна двухуровневая иерархия
просто если на втором уровне нету данных то он пустой совсем не нужен
я могу успользовать .modify(), но можно ли сделать по другому?
7 дек 15, 15:10    [18524726]     Ответить | Цитировать Сообщить модератору
 Re: FOR XML AUTO убрать пустой уровень при показе  [new]
Konst_One
Member

Откуда:
Сообщений: 11538
SELECT 
      LEVEL1.Text1 as 'Text1',
      (
      SELECT LEVEL2.Text2 FROM @t2 LEVEL2 WHERE LEVEL2.id2=LEVEL1.id1
      FOR XML PATH('LEVEL2'), elements, type
      )
FROM @t1 LEVEL1
FOR XML  AUTO, ELEMENTS  ,ROOT('ROOT')
7 дек 15, 15:16    [18524760]     Ответить | Цитировать Сообщить модератору
 Re: FOR XML AUTO убрать пустой уровень при показе  [new]
michael R
Member

Откуда: из-за границы
Сообщений: 2113
Konst_One
спасибо
да работает
даже чуть быстрее чем modify()
7 дек 15, 15:30    [18524834]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить