如果我做
Declare @t table(Email xml)
Declare @email varchar(100) = 'xxx&xx@monop.com'
Insert into @t
select '<Emails> <Email>' + @email +'</Email></Emails>'
select * From @t
我会收到预期的错误
消息 9411,级别 16,状态 1,第 8 行 XML 解析:第 1 行,字符 27,需要分号
我几乎在任何地方(包括 SO)都找到了一种解决方案,replace '&' with '&
它可以工作
Insert into @t
select CAST('<Emails><Email>' + REPLACE(@email, '&', '&') + '</Email></Emails>' AS XML)
输出
<Emails><Email>xxx&xx@monop.com</Email></Emails>
但是,我正在尝试使用 CData 方法(只是解决问题的另一种方法)
Declare @t table(Email xml)
Declare @email varchar(100) = 'xxx&xx@monop.com'
Insert into @t
Select CAST('<![CDATA[Emails> <Email>' + @email + '</Email> </Emails]]>' AS XML)
select * From @t
当我得到以下输出时
Emails> <Email>xxx&xx@monop.com</Email> </Emails
我想要实现的是按原样存储数据,即所需的输出应该是
<Emails><Email>xxx&xx@monop.com</Email></Emails>
有可能吗?
我知道如果 xml 无法理解的任何其他特殊字符将作为输入传递给它,则替换函数将失败,例如 '<' i 在这种情况下,我们需要再次替换它......
谢谢