我正在尝试将旧数据转换为新的结构合理的SQL DB。为简单起见,我们假设一个旧表包含两个字段,Id和Emails。这是一些数据。
ID | Emails
0 test@test.com, test1@test.com, stuff@domain.com
1 thing@thing.com
我想把它们带到新表中:
ID | Emails
0 test@test.com
0 test1@test.com
0 stuff@domain.com
1 thing@thing.com
我可以使用此TSQL执行此操作:
INSERT INTO NewTable(Id, [Address])
Select t.Id, split.val
From OldTable t
Cross Apply dbo.Split(t.Emails, ',') split
WHERE t.Emails <> ''
这很有效,直到我遇到一个特殊字符的电子邮件,如下所示: 电子邮件@汤姆&安培; jerry.com
&符号打破查询并抛出以下错误:
Msg 9411,Level 16,State 1,Line 3
XML解析:第1行,第27个字符,预期分号
避免错误并将电子邮件映射到新表的最简单方法是:email @ tom&amp; jerry.com
感谢。
答案 0 :(得分:1)
你最初可以简单地使用替换来替换所有的&符号,比如&#34; AANNDD&#34;或&& 39;&gt;&gt; AND&lt;&lt;&#39;。
SELECT REPLACE(Emails, '&', '>>AND<<')...
然后在完成后再替换它。
您可以在插入之前替换旧表中的所有安培。然后在新表上运行更新。