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

Откуда: Kazan
Сообщений: 46
Добрый день.
Помогите, пожалуйста, есть запрос вида
DECLARE @xml_segment varchar(max), @link  varchar(255)

--SET @xml_segment = '<name_link>йцу</name_link>'

SELECT	1	AS Tag,
		0	AS Parent,
''				AS [Tag1!1],
null		AS [link!2!!xmltext],
'текст'	AS [Tag1!1!message_type!Element]

UNION ALL

SELECT	2	AS Tag,
		1	AS Parent,
null				AS [Tag1!1],
@xml_segment		AS [link!2!!xmltext],
null	AS [Tag1!1!message_type!Element]
FOR XML EXPLICIT 


При @xml_segment = null создается
<Tag1>
  <message_type>текст</message_type>
  <link />
</Tag1>
, Как сделать так что бы при пустом значении элемент
<link />
не создавался вовсе. т.е.
<Tag1>
  <message_type>текст</message_type>
</Tag1>
5 май 17, 12:26    [20460183]     Ответить | Цитировать Сообщить модератору
 Re: Не показывать <doc_link /> FOR XML EXPLICIT  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 940
gnatochka,
Так работает?
SELECT
  [tag] = (
    SELECT
      [*] = ( SELECT [message_type] FOR XML PATH(''), TYPE ),
      [*] = ( SELECT [link] WHERE [link] IS NOT NULL FOR XML PATH(''), TYPE )
    FOR XML PATH(''), TYPE
  )
FROM (
  VALUES
    ( 'текст1', NULL ),
    ( 'текст2', 'линк2' )
  ) t( [message_type], [link] )
FOR XML PATH('')
5 май 17, 15:42    [20461193]     Ответить | Цитировать Сообщить модератору
 Re: Не показывать <doc_link /> FOR XML EXPLICIT  [new]
gnatochka
Member

Откуда: Kazan
Сообщений: 46
с FOR XML PATH значения NULL и без ухищрений не создают одиночный тег.
Вопрос именно для FOR XML EXPLICIT (Мне нужен именно EXPLICIT т.к. есть данные заключенные в CDATA)
Обошла таким образом: Записываю все нижние уровни в переменные varchar(max)


SELECT @xml_segment = 
'<xml_segment>' + @segment1 
 + ISNULL(@segment2,'') 
 + ISNULL('<status_datetime>' + CONVERT(Varchar(20),@status_datetime,126) + '</status_datetime>','')
 + ISNULL(@segment3,'')
 +'</xml_segment>'
 

SELECT	1	AS Tag,
		0	AS Parent,
''			AS [DOC_NAME!1],
@xml_segment	AS [DOC_NAME!1!!xmltext]
FOR XML EXPLICIT, BINARY BASE64
11 май 17, 10:45    [20471567]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить