1

スケーラブルなソリューションを考え出すのに苦労しています。SQL Server 2008 で複雑な XML 要素を追加するにはどうすればよいですか?

たとえば、次の単純なテーブルがあります。

CREATE TABLE my_audit (
    [id] [int] IDENTITY(1,1) NOT NULL,  
    [xml_file] [xml] NULL,
 );

次の XML ファイルを挿入するとします。

<Input>
  <Element1 />
</Input>

次の SQL ステートメントを実行して、2 番目の要素を追加できます。

UPDATE my_audit
SET xml_file.modify('insert element Element2 {""} as last into (/Input)[1]')
WHERE id = 1;

これは機能し、結果は次のようになります。

<Input>
  <Element1 />
  <Element2 />
</Input>

残念ながら、これはより複雑な要素タイプではスケーラブルではありません。次の XML を追加することを検討してください。

<Input>
  <Element3>
    <subElement1></subElement1>
  </Element3>
</Input>

今、私は何をしますか?

これらの種類の呼び出しは、ADO を使用してデータベースに接続する .net アプリケーションによって行われています (これは変更できません)。独自のマッピング ライブラリを作成すると、すぐに制御不能になる可能性があります。それはスケーラブルなソリューションではありません。

VARCHAR 変数 "<Element3><subElement1></subElement1></Element3>" を渡して追加できる TSQL コマンドはありますか? たぶん、他のより良い方法はありますか?

4

1 に答える 1

2

要素や属性などをハード コーディングする代わりに、学習しました。別の XML 変数を設定して、遭遇する可能性のあるすべての奇妙な状況を処理することができました。

だから私の古いSQL文:

UPDATE my_audit
SET xml_file.modify('insert element Element2 {""} as last into (/Input)[1]')
WHERE id = 1;

になります:

DECLARE @xmlAppend XML = '<Element2 />';

UPDATE my_audit
SET xml_file.modify('insert sql:variable("@xmlAppend") as last into (/Input)[1]')
WHERE id = 1;
于 2013-05-30T15:23:10.167 に答える