我的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], '&', '&'), '<', '<'), '>', '>'), '"', '"'), '''', '''),'No PET Data Available')
如果我删除代码的INSERT
部分并离开选择,它会显示所有记录。但是,当我尝试从select语句插入记录时,我收到以下错误:
Msg 9421, Level 16, State 1, Procedure InsertFeedback, Line 42
XML parsing: line 1, character 118, illegal name character
数据的选择似乎运行良好;尝试将这些数据插入表中时出错。
答案 0 :(得分:1)
您需要转义P.TICKET和P.CUSTOMERACCOUNTNUMBER的内容。 但是,我会让SQL为您生成XML,而不是手动生成。
SELECT Ticket name, CUSTOMERACCOUNTNUMBER ticket FOR XML PATH(''), ROOT('Optional')
这可以是子查询或使用交叉应用。
答案 1 :(得分:0)
这是您问题的最简单答案。您必须将字符串转换为xml,如。
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