2

重複の可能性:
XML へのテキストのセーフ キャスト

レコード (80000 以上) を選択し、それらのレコードを別のテーブルに挿入するストアド プロシージャを使用しています。私のクエリは、ストアドプロシージャ内にあるレコードを選択するためのものです。

SELECT EmployeeID,CAST(EmployeeInformation AS xml) as ei, CreatedTimeStamp 
FROM Employee WITH (NOLOCK)

EmployeeInformation列には、文字列形式の XML データが含まれます。(列のフォーマットは変更できません)

私の問題は、選択EmployeeInformationクエリの不良XMLデータが失敗し、ストアドプロシージャが失敗した場合です。

例えば。不正な XML の : <Employee><EmployeeID></EmployeeI></Employee>[ここで開始タグEmployeeIDは終了タグと同じではありませんEmployeeI]

悪い XML レコードをスキップして、 Selectクエリで他のレコードを取得する方法はありますか? また、スキップされたレコードを追跡する方法はありますか?

4

1 に答える 1

0

EmployeeID 要素が EmployeeI で終わり、D が最後にない場合、xml パーサーでは間違ったデータに対してクエリを実行できません。それを検出するためにパーサーを書きたいと思うかもしれませんが、私は確かにその方法をお勧めしません。入力を修正することは、より良い方法かもしれません。入力に問題がある場合は、修正することを忘れないでください。それを解決するために質問をクリアしないでください。また、xml データがどれだけ大きいかは関係ありません。既に選択したように、xml データ型が格納列に最適なデータ型になります。

乾杯

于 2012-09-07T16:24:30.903 に答える