私が行った場合
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を含む)見つけた解決策の1つは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この場合も、置換する必要があります...
ありがとう