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 条记录。现在我需要更新 element2 中 att4 的值,其中 att4 值为 6 x 2。我已经搜索并尝试过,但没有找到任何合适的解决方案。希望有人能指出我正确的方向。提前致谢。

4

1 回答 1

1

这样做可能有点棘手,因为您的列类型是 VARCHAR 而不是 XML,但是您可以编写一个我认为可以解决的小转换脚本。

为了使它起作用,您需要去掉 < ?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 回答