0

tReportTemplate というテーブルがあり、次のようになります。

Table tReportTemplate (
 [ReportTemplateID] int NOT NULL,
 [CustomProperties] [varchar](7500) NOT NULL,
 CONSTRAINT [PK_tReportTemplate] PRIMARY KEY
 (
   [ReportTemplateID] ASC
 )
)

[CustomProperties] では、次のような XML のレポート テンプレートを保存しています -

<?xml version="1.0" encoding="utf-16"?>
<xs:schema targetNamespace="urn:wtxreport-1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="urn:wtxreport-1.0" elementFormDefault="qualified" attributeFormDefault="unqualified">
  <reportTemplate1>
    <template reportName="Demo" description="" beginDate="01/01/1901" endDate="01/01/2001" />
    <element1 att1="" att2="0" att3="0,3,5,1" />
    <element2 att4="1,4,2,6,7,5" att5="7,2,5,6,1,4,0" att6="0,1,2,3,4,6,8,9,10,11"/>
    <element3   att7="2,12,1,6,7" att8="0" att9="True" />
    <element4 att10="0" att11="False" att12="False" />
    <element5 att13="6"  att14="false" att15="0"/>
    <element6 att16="0" att17="False" />
    <element7 att18="0" />
  </reportTemplate1>
</xs:schema>

そのテーブルには 10,000 を超えるレコードがあります。ここで、att4 の値が 6 x 2 である element2 の att4 の値を更新する必要があります。検索して試しましたが、適切な解決策が見つかりませんでした。誰かが私を正しい方向に向けてくれることを願っています。前もって感謝します。

4

1 に答える 1

1

列の型が XML ではなく VARCHAR であるため、これを行うのは少し難しいかもしれませんが、うまくいくと思われる小さな変換スクリプトを書くことができます。

これを機能させるには、< ?xml ... >、< xs:schema ... >< /xs:schema> タグを取り除き、最終的なテーブルを作成するときに最後に追加し直す必要があります。アップデート。

これをチェックしてください:

DECLARE @tempTable
(reportTemplateID INT, CustomProperties VARCHAR(7500), CustomPropertiesXML XML)

INSERT INTO @tempTable(reportTemplateID, customProperties)
SELECT ReportTemplateID, CustomProperties
FROM tReportTemplate

-- UPDATE to strip out <?xml ... >, <xs:schema ... ></xs:schema> tags and 
-- place the XML in @tempTable.CustomPropertiesXML

UPDATE t
SET customPropertiesXML.modify('replace value of (reportTemplate1/element2/@att4[1])[1] with [WhateverYouNeedToUpdateItTo]')
FROM @tempTable t

-- UPDATE to add in <?xml ... >, <xs:schema ... ></xs:schema> tags and 
-- place the now VARCHAR back in @tempTable.CustomProperties

UPDATE trt
SET trt.CustomProperties = t.CustomProperties)
FROM tReportTemplate trt
JOIN @tempTable t
  ON t.reportTemplateID = trt.ReportTemplateID
于 2013-11-07T01:39:04.810 に答える