繁体   English   中英

如何在MS SQL中转义与号

[英]How to escape ampersand in MS SQL

我有一个名为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

我尝试过各种转义序列,但是没有运气:

/&
\&
&&

关于此问题有很多指南,我想知道是否有解决此问题的最佳方法。

这是解决这个问题的更好方法:

UPDATE tblCandy SET OrigOtherData.modify ('insert <BrandName><![CDATA[M&Ms]]></BrandName> as first into (CandySpecs/Table)[1]') WHERE RecordID = 1

说明:CDATA标记告诉XML忽略此数据块的字符标记。

相关的StackOverflow问题(严格来说不是重复的问题,但是如果您不熟悉它,则值得阅读): XML中的<![CDATA []]>是什么意思?

这将不仅绕过& ,而且绕过其他可能破坏的数据段(例如<> ,这些数据可能存在于您正在处理的数据中。

SQL Server中的特殊符号使用\\进行转义

在您的示例语句中将如下所示:

UPDATE tblCandy SET OrigOtherData.modify ('insert <BrandName>M\&Ms</BrandName> as first into (CandySpecs/Table)[1]') WHERE RecordID = 1

使用&amp; 而不是& 我找到了本文的答案: http : //www.techrepublic.com/article/beware-of-the-ampersand-when-using-xml/

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM