2

データベースに User という名前のテーブルがあります。その中には、多くの属性を含む XmlText という名前の xml 列があります。

  <userDetails>
  <MobileVerified>True</MobileVerified>
  <EmailVerified>True</EmailVerified>
  <IPAddress>122.160.65.232</IPAddress>
  <Gender>Male</Gender>
  <DateOfBirth>1970-03-22T00:00:00</DateOfBirth>
  <DealingInProperties>residential_apartment_flat</DealingInProperties>
  <DealingInProperties>residential_villa_bungalow</DealingInProperties>
  <DealingInProperties>residential_farm_house</DealingInProperties>
</userDetails>

「residential_apartment_flat」が XmlText 列に存在する場合、すべての「residential_villa_bungalow」の値を「residential_apartment_flat」にマージする必要があります。それ以外の場合、「residential_apartment_flat」はデフォルトで残されます。データベースには約 700000 のレコードがあるため、通常の更新と cursot の間でどのような手法を使用できるかを覚えておいてください。

次の列「UserID、XmlText」でクエリを実行します

おそらくロジックは次のようになります..

if ('residential_villa_bungalow') exists
(
if ('residential_apartment_flat') exists
    remove the 'residential_villa_bungalow' node as there must be only one 'residential_apartment_flat' node
else
    update 'residential_villa_bungalow' into 'residential_apartment_flat'
)
4

1 に答える 1

1

XML データ変更言語 (XML DML)

-- Delete bungalow where already exist a flat
update YourTable
set    XMLText.modify('delete /userDetails/DealingInProperties[. = "residential_villa_bungalow"] ')
where  XMLText.exist('/userDetails[DealingInProperties = "residential_apartment_flat"]') = 1 and
       XMLText.exist('/userDetails[DealingInProperties = "residential_villa_bungalow"]') = 1

-- Change value from bungalow to flat
update YourTable 
set    XMLText.modify('replace value of (/userDetails/DealingInProperties[. = "residential_villa_bungalow"]/text())[1] 
                       with "residential_apartment_flat"')
where  XMLText.exist('/userDetails[DealingInProperties = "residential_villa_bungalow"]') = 1
于 2012-09-21T06:42:52.887 に答える