Когда я генерирую Xml в Sql Server 2008 R2 с использованием For Explicit (поскольку мой потребитель хочет, чтобы один из элементов был заключен в CDATA) и сохранял результаты в переменной Xml, данные, которые я хочу заключить в теги CDATA, больше не отображаются вCDATA теги.Если я не помещаю результаты For Xml Explicit в переменную Xml, теги CDATA сохраняются.Я использую переменную @Xml в качестве SqlParameter из .Net.
В этом примере при первом выборе (Select @Xml) не строка 2 обернута в теги CDATA.Но при втором выборе (тот же запрос, который использовался для заполнения переменной @Xml) имеет теги CDATA, обертывающие столбец Line2.
Declare @Xml Xml
Begin Try
Drop Table #MyTempTable
End Try
Begin Catch
End Catch
Select
'Record' As Record
, 'Line1' As Line1
, 'Line2' As Line2
Into
#MyTempTable
Select @Xml =
(
Select
x.Tag
, x.Parent
, x.[Root!1]
, x.[Record!2!Line1!Element]
, x.[Record!2!Line2!cdata]
From
(
Select
1 As Tag, Null As Parent
, Null As [Root!1]
, Null As [Record!2!Line1!Element]
, Null As [Record!2!Line2!cdata]
From
#MyTempTable
Union
Select
2 As Tag, 1 As Parent
, Null As [Root!1]
, Line1 As [Record!2!Line1!Element]
, Line2 As [Record!2!Line2!cdata]
From
#MyTempTable
) x
For
Xml Explicit
)
Select @Xml
Select
x.Tag
, x.Parent
, x.[Root!1]
, x.[Record!2!Line1!Element]
, x.[Record!2!Line2!cdata]
From
(
Select
1 As Tag, Null As Parent
, Null As [Root!1]
, Null As [Record!2!Line1!Element]
, Null As [Record!2!Line2!cdata]
From
#MyTempTable
Union
Select
2 As Tag, 1 As Parent
, Null As [Root!1]
, Line1 As [Record!2!Line1!Element]
, Line2 As [Record!2!Line2!cdata]
From
#MyTempTable
) x
For
Xml Explicit
Begin Try
Drop Table #MyTempTable
End Try
Begin Catch
End Catch