将XML块插入SQL XML字段

时间:2015-02-05 14:43:34

标签: sql sql-server xml tsql stored-procedures

我的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语句插入记录时,我收到以下错误:

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

数据的选择似乎运行良好;尝试将这些数据插入表中时出错。

2 个答案:

答案 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