这是我的xml。我的目标是使用CDATA将数据封装在Value节点中,然后将其导入到移除了CDATA的Xml类型列中。围绕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><CustomPanel VisibilityIndicator="">&lText="No" Checked="False" Height="20" Width="50"/></Cell></Row></Table></CustomPanel></Value>
那么我做了一些动态SQL来更新列
EXEC('UPDATE ['+ @tableName + '] SET [' + @columnName + '] = ''' + @nodeValue + ''' WHERE Shape_ID = ''' + @ShapeID + '''')
我被告知我可能能够使用以下来删除CDATA,但我没有使用它。
declare @x xml
set @x=N'<Value><CustomPanel....... all the current info ...=""></Value>'
select @x.value('(/Value)[1]', 'nvarchar(max)')
select '<![CDATA[' + @x.value('(/Value)[1]', 'nvarchar(max)') + ']]'
再次检查列后,似乎它包含正确的信息。但是,我从来没有将它从VARCHAR改回XML,或者删除了CDATA符号,即使它们在我查看列时似乎已经消失了。那么我在这里错过了什么?这是一个正确的方法吗?
Btw:这行'SET @ OutputXML = replace(@OutputXML,''。 –
Shnugo