我正在尝试将遗留数据转换为新的结构正确的 SQL 数据库。为简单起见,假设一个旧表包含两个字段,ID 和电子邮件。这是一些数据。
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 <> ''
这很有效,直到我遇到一封包含特殊字符的电子邮件,如下所示:email@tom&jerry.com
& 号中断查询并引发以下错误:
Msg 9411, Level 16, State 1, Line 3
XML parsing: line 1, character 27, semicolon expected
规避错误并将电子邮件按原样映射到新表中的最简单方法是:email@tom&jerry.com
谢谢。