レガシーデータを新しい適切に構造化されたSQLDBに変換しようとしています。簡単にするために、古いテーブルにIdとEmailsの2つのフィールドが含まれているとします。ここにいくつかのデータがあります。
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
アンパサンドはクエリを中断し、次のエラーをスローします:
メッセージ9411、レベル16、状態1、行3
XML解析:行1、文字27、セミコロンが必要です
エラーを回避し、電子メールを次のように新しいテーブルにマップする最も簡単な方法は何ですか:email@tom&jerry.com
ありがとう。