Обертывание и удаление CDATA вокруг XML

Это мой xml. Моя цель - обернуть данные в узле Value с помощью CDATA при экспорте, а затем импортировать их обратно в столбец типа XML с удаленным CDATA.

<Custom>
     <Table>Shape</Table>
     <Column>CustomScreen</Column>
     <Value>Data</Value>
<Custom>

Прямо сейчас я заменяю «Данные» внутри узла «Значение» на XML из таблицы, а затем полагаю, что я помещаю вокруг него CData, где ShapeInfo - это тип XML, а CustomPanel - первый узел [ShapeInfo] XML.

SET @OutputXML= replace(@OutputXML, 'Data', CAST((SELECT [ShapeInfo]      
                         FROM [Shape] WHERE [Shape_ID] = @ShapeID) as VARCHAR(MAX))

SET @OutputXML= replace(@OutputXML, '<CustomPanel', '<![CDATA[<CustomPanel')

Однако результат выглядит примерно так, хотя я ожидал, что CDATA содержит только информацию:

<Value>&lt;CustomPanel VisibilityIndicator=""&gt;&lText="No" Checked="False" Height="20" Width="50"/&gt;&lt;/Cell&gt;&lt;/Row&gt;&lt;/Table&gt;&lt;/CustomPanel&gt;</Value>

Затем я делаю некоторые динамические SQL для обновления этого столбца

EXEC('UPDATE ['+ @tableName +  '] SET [' + @columnName + '] = ''' + @nodeValue + ''' WHERE Shape_ID = ''' + @ShapeID + '''')

Мне сказали, что я могу использовать следующее для удаления CDATA, но я не использовал его.

declare @x xml
set @x=N'<Value>&lt;CustomPanel....... all the current info ...=&quot;&quot;&gt;</Value>'

select @x.value('(/Value)[1]', 'nvarchar(max)')

select '<![CDATA[' + @x.value('(/Value)[1]', 'nvarchar(max)') + ']]'

После проверки столбца снова кажется, что он содержит правильную информацию. Однако я никогда не изменял его обратно на XML из VARCHAR и не удалял символы CDATA, хотя они, кажется, исчезли, когда я проверял столбец. Так чего мне здесь не хватает? Это правильный способ сделать это?

Ответы на вопрос(2)

Ваш ответ на вопрос