我有一个名为tblCandy的表,其中包含名为CandySpecs的XML字段。当我尝试添加包含&符号(&)的值时,我收到错误:
UPDATE tblCandy SET OrigOtherData.modify ('insert <BrandName>M&Ms</BrandName> as first into (CandySpecs/Table)[1]') WHERE RecordID = 1
Msg 2282, Level 16, State 1, Line 1
XQuery [tblCandy.CandySpecs.modify()]: Invalid entity reference
我尝试了各种逃脱序列但没有运气:
/&
\&
&&
在这个问题上有很多指导,我想知道是否有一种解决这个问题的最佳方法。
答案 0 :(得分:0)
SQL服务器中的特殊符号正在使用\
将如下所示:
UPDATE tblCandy SET OrigOtherData.modify ('insert <BrandName>M\&Ms</BrandName> as first into (CandySpecs/Table)[1]') WHERE RecordID = 1
答案 1 :(得分:0)
使用&
代替&
。
我找到了这篇文章的答案:http://www.techrepublic.com/article/beware-of-the-ampersand-when-using-xml/
答案 2 :(得分:0)
这是处理此问题的更好方法:
UPDATE tblCandy SET OrigOtherData.modify ('insert <BrandName><![CDATA[M&Ms]]></BrandName> as first into (CandySpecs/Table)[1]') WHERE RecordID = 1
说明:CDATA标记告诉XML忽略此数据块的字符标记。
与StackOverflow相关的问题(严格来说不是重复的问题,但如果您对此不太熟悉,则值得阅读):What does <![CDATA[]]> in XML mean?
这不仅会绕过&
,还会绕过您正在处理的数据中可能存在的其他潜在破坏数据,例如<
和>
。 / p>
答案 3 :(得分:-1)
SET NOCOUNT ON
GO
CREATE TABLE tblCandy ( Id INT, Brandname XML )
GO
INSERT INTO tblCandy VALUES ( 1, '<Brandname >test</Brandname >' )
GO
SELECT 'before', * FROM tblCandy
UPDATE tblCandy
SET Brandname.modify('replace value of (//Brandname/text())[1]
with string("as first into")')
WHERE Id = 1
SELECT 'After', * FROM tblCandy
GO
DROP TABLE tblCandy
GO