SQL Serverのテーブルのxmlデータ型にxmlファイルを保存しています。ここで、(xquery を使用して) いくつかのフラグメントを取得し、(xquery を使用して) 変更されたフラグメントでフラグメントを更新したいと考えています。いくつかの提案が必要です。
ノードを削除するコードがあり、それは以下のとおりですが、削除中に同じ場所に変更されたノードを挿入する必要があります。これはどのように行うことができますか?
--SET @doc.modify('delete (/DATA/SDACTS)')
これは、ノードを削除したい場合に機能しますが、変更されたノードを同じ場所に挿入するにはどうすればよいですか
次に、値がクエリ文字列として渡されるノードを削除したいので、文字列を作成する必要があります
以下のように
DECLARE @x XML
SET @x = '
<DATA>
<SDACTS>
<SDACT TYPE="Economy" COLOUR="0xff0000" />
<SDACT TYPE="Environment" COLOUR="0x00ff00" />
<SDACT TYPE="People" COLOUR="0x0000ff" />
<SDACT TYPE="Society" COLOUR="0xff00ff" />
</SDACTS>
<LOCATIONS>
<CONTINENT TITLE="South America">
<COUNTRY TITLE="Chile">
<HEADOFFICE>Santiago</HEADOFFICE>
<ADDRESS>
<p>Pedro de Valdivia 291</p><p>Providencia</p><p>Santiago</p>
</ADDRESS>
<LATITUDE>-33.426127</LATITUDE>
<LONGITUDE>-70.611469</LONGITUDE>
<BUSINESSUNITS>Copper</BUSINESSUNITS>
<EMPLOYEES />
<NUMBEROFBUSINESS>1</NUMBEROFBUSINESS>
</COUNTRY>
<COUNTRY TITLE="Brazil">
<HEADOFFICE>Brazil</HEADOFFICE>
<ADDRESS>
<p>Pedro de Valdivia 291</p><p>Providencia</p><p>Santiago</p>
</ADDRESS>
<LATITUDE>-38.426127</LATITUDE>
<LONGITUDE>-60.611469</LONGITUDE>
<BUSINESSUNITS>Zinc</BUSINESSUNITS>
<EMPLOYEES />
<NUMBEROFBUSINESS>2</NUMBEROFBUSINESS>
</COUNTRY>
</CONTINENT>
</LOCATIONS>
</DATA>
南米大陸にある国ブラジルを削除する必要があるため、他の国や大陸が来る可能性があるため、動的でなければならないパラメーターとしてこれらを保持する必要があります。
declare @country varchar(50)
declare @continent varchar(50)
set @country = 'Brazil'
set @continent = 'South America'
declare @final varchar(100)
set @final = '//CONTINENT[@TITLE="' + @continent + '"]/COUNTRY[@TITLE="' + @country + '"]'
select @final
--SELECT @doc.query('sql:variable("@final")') 'XmlDesc' This works for select statement but not for delete
SET @doc.modify('delete (sql:variable("@final"))') This does not work and gives error.
SELECT @doc
私の要件:
基本的に私は .NET で xml 編集ツールを作成しており、巨大な xml ファイルをロードすると jQuery ツリーがハングするため、巨大な xml ファイルをテーブルに保存し、セグメント (子ノード) を呼び出してから、それらのセグメントを jquery ツリーにロードし、ユーザーがそれらを変更します。ノード。変更したセグメントをデータベースに取り、変更したセグメントで更新したいと考えています。