現在、C#で記述した現在のデータインポートプロセスをアップグレードしています。
アップグレードプロセスの一環として、リライトからのインポートプロセスの結果を古いシステムの結果と照合する必要があります。
行った変更の1つは、コンマ区切りのリストを別のテーブルの行に分割することでした。これにより、単純な結合を使用して結果をフィルタリングできるようになります。
これは古いスキーマです:
FormNumber MainCategories
1 blue,green,red
2 yellow,red,blue
3 white
正規化したもの:
FormNumber AttributeId Value
1 1 blue
1 1 green
1 1 red
2 1 yellow
2 1 red
2 1 blue
3 1 white
次のステップは、2つのプロセスの結果が同じであることを確認することです。これらのチェックの1つは、古いプロセスのMainCategoriesフィールドを、正規化されたテーブルの結果と比較することです。
これは、最後に、質問につながります。古いスキーマの値と比較するために、新しいスキーマのコンマ区切りのリストを作成するにはどうすればよいですか。
ここで@Riteshによって提案されたXMLPathソリューションを試しました:多くの行を単一のテキスト文字列に連結しますか?
適合したSQLステートメントは次のとおりです。
Select distinct ST2.FormNumber,
(Select ST1.Value + ',' AS [text()]
From cache.ArtifactAttribute ST1
Where ST1.FormNumber= ST2.FormNumber
ORDER BY ST1.FormNumber
For XML PATH ('')) [Values]
From cache.ArtifactAttribute ST2
問題は、結果が正しくないことです。FormNumber 1のテーブルには3つのエントリしかありませんが、[値]列(動的に作成された区切り文字列)には誤った結果が表示されます。明らかに、SQLコードを正しく実装していません。
何が間違っているのですか?