0

レガシーデータを新しい適切に構造化された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

ありがとう。

4

1 に答える 1

1

最初にreplaceを使用するだけで、すべてのアンパサンドを「AANNDD」または「>>AND<<」などの他の何かに置き換えることができます。

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

完了したら、それを元に戻します。

挿入する前に、古いテーブルのすべてのアンペアランドを置き換えることができます。次に、新しいテーブルで更新を実行します。

于 2013-02-28T16:49:34.400 に答える