0

我正在尝试将遗留数据转换为新的结构正确的 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

谢谢。

4

1 回答 1

1

您最初可以简单地使用替换来用其他东西替换所有&符号,例如“AANNDD”或“>>AND<<”。

SELECT REPLACE(Emails, '&', '>>AND<<')...

然后在完成后将其替换回来。

您可以在插入之前替换旧表中的所有 & 符号。然后只需在新表上运行更新。

于 2013-02-28T16:49:34.400 回答