将 XML 的块插入 SQL XML 字段

Inserting Block of XML into SQL XML Field

我的 tabled 中有一个名为 Details 的字段,其中包含用户可以填写的 xml 可选字段字符串,如下所示:

<optional>
 <name>Value</name>
 <account>123</account>
</optional>

我正在尝试将 xml 的块插入查询中的该字段,如下所示:

SELECT  SUBMITTEDON AS 'SubmitDate',
        'coachingOpp' AS 'Type',
        R.ReasonID AS 'reasonID',
        'TLReview' AS 'status',
        'Pending' AS outcome,
        '<optional>' +
        '<name>' + P.TICKET + '</name>' +
        '<account>' + P.CUSTOMERACCOUNTNUMBER + '</account>' +
        '</optional>' AS 'Details',
        ISNULL(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(P.REQUESTDETAILS + ' --- ' + P.[MESSAGE], '&', '&amp;'), '<', '&lt;'), '>', '&gt;'), '"', '&quot;'), '''', '&#39;'),'No PET Data Available')

如果我删除代码的 INSERT 部分并只保留 select,它会正常显示所有记录。但是,当我尝试从 select 语句插入记录时,出现以下错误:

Msg 9421, Level 16, State 1, Procedure InsertFeedback, Line 42
XML parsing: line 1, character 118, illegal name character

数据的 selecting 似乎 运行 没问题;尝试将该数据插入 table.

时出错

您需要转义 P.TICKET 和 P.CUSTOMERACCOUNTNUMBER 的内容。 但是,我会让 SQL 为您生成 XML 而不是手动生成。

SELECT Ticket name, CUSTOMERACCOUNTNUMBER ticket FOR XML PATH(''), ROOT('Optional')

可以是子查询或使用交叉应用。

这是对您的问题最简单的回答。你必须将字符串转换成 xml like.

declare @xmlstring varchar(200) = '<optional>
 <name>Value</name>
 <account>123</account>
</optional>'

declare @convertStringtoXml xml = cast ( @xmlstring as xml)

create table #t  (xmlfld xml)
insert into #t values(@convertStringtoXml)  

select * from #t

drop table #t