2011-09-29 79 views
1

我是新的SQL Server中的xml數據類型。我有一個我想要編輯的xml字段。實質上,我想刪除某些節點(如果它們具有某種數據類型或值)。有許多子類型節點,每個子類型可以有許多SubtypeFieldInfo。使用SQL編輯xml

在一個SubtypeFieldInfo節點包含一個節點的情況:

<DefaultValue xsi:type="xs:dateTime">2222-02-22T00:00:00</DefaultValue> 

我想刪除節點

下面是完整的XML。非常感謝任何幫助

<DEFeatureClassInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:typens="http://www.esri.com/schemas/ArcGIS/10.0" xsi:type="typens:DEFeatureClassInfo"> 
    <Subtypes xsi:type="typens:ArrayOfSubtype"> 
    <Subtype xsi:type="typens:Subtype"> 
     <SubtypeName>1</SubtypeName> 
     <SubtypeCode>1</SubtypeCode> 
     <FieldInfos xsi:type="typens:ArrayOfSubtypeFieldInfo"> 
     <SubtypeFieldInfo xsi:type="typens:SubtypeFieldInfo"> 
      <FieldName>Status</FieldName> 
      <DomainName>pwStatus</DomainName> 
     </SubtypeFieldInfo> 
     <SubtypeFieldInfo xsi:type="typens:SubtypeFieldInfo"> 
      <FieldName>OwnedBy</FieldName> 
      <DomainName>shdMaintainedBy</DomainName> 
     </SubtypeFieldInfo> 
     <SubtypeFieldInfo xsi:type="typens:SubtypeFieldInfo"> 
      <FieldName>MaintainedBy</FieldName> 
      <DomainName>shdMaintainedBy</DomainName> 
     </SubtypeFieldInfo> 
     <SubtypeFieldInfo xsi:type="typens:SubtypeFieldInfo"> 
      <FieldName>InputCode</FieldName> 
      <DomainName /> 
      <DefaultValue xsi:type="xs:int">12</DefaultValue> 
     </SubtypeFieldInfo> 
     <SubtypeFieldInfo xsi:type="typens:SubtypeFieldInfo"> 
      <FieldName>UnitType</FieldName> 
      <DomainName>trafStripingType</DomainName> 
      <DefaultValue xsi:type="xs:string">SY</DefaultValue> 
     </SubtypeFieldInfo> 
     <SubtypeFieldInfo xsi:type="typens:SubtypeFieldInfo"> 
      <FieldName>CalTDescription</FieldName> 
      <DomainName>trafStripingDescr</DomainName> 
      <DefaultValue xsi:type="xs:string">CL</DefaultValue> 
     </SubtypeFieldInfo> 
     <SubtypeFieldInfo xsi:type="typens:SubtypeFieldInfo"> 
      <FieldName>DetailNumber</FieldName> 
      <DomainName /> 
      <DefaultValue xsi:type="xs:string">1</DefaultValue> 
     </SubtypeFieldInfo> 
     <SubtypeFieldInfo xsi:type="typens:SubtypeFieldInfo"> 
      <FieldName>StripingDetail</FieldName> 
      <DomainName>trafStripingDetail</DomainName> 
      <DefaultValue xsi:type="xs:string">2WYCENTERLINE</DefaultValue> 
     </SubtypeFieldInfo> 
     <SubtypeFieldInfo xsi:type="typens:SubtypeFieldInfo"> 
      <FieldName>Color</FieldName> 
      <DomainName>trafStripingColor</DomainName> 
      <DefaultValue xsi:type="xs:string">Yellow</DefaultValue> 
     </SubtypeFieldInfo> 
     <SubtypeFieldInfo xsi:type="typens:SubtypeFieldInfo"> 
      <FieldName>LinePattern</FieldName> 
      <DomainName>trafStripeLineType</DomainName> 
      <DefaultValue xsi:type="xs:string">Skip</DefaultValue> 
     </SubtypeFieldInfo> 
     <SubtypeFieldInfo xsi:type="typens:SubtypeFieldInfo"> 
      <FieldName>Material</FieldName> 
      <DomainName>trafStripingMaterial</DomainName> 
     </SubtypeFieldInfo> 
     <SubtypeFieldInfo xsi:type="typens:SubtypeFieldInfo"> 
      <FieldName>TravelDirection</FieldName> 
      <DomainName>trafTravelDirection</DomainName> 
     </SubtypeFieldInfo> 
     <SubtypeFieldInfo xsi:type="typens:SubtypeFieldInfo"> 
      <FieldName>IsSchoolZone</FieldName> 
      <DomainName>shdBooleanYesNo</DomainName> 
     </SubtypeFieldInfo> 
     <SubtypeFieldInfo xsi:type="typens:SubtypeFieldInfo"> 
      <FieldName>EstInstallDate</FieldName> 
      <DomainName /> 
      <DefaultValue xsi:type="xs:dateTime">2222-02-22T00:00:00</DefaultValue> 
     </SubtypeFieldInfo> 
     <SubtypeFieldInfo xsi:type="typens:SubtypeFieldInfo"> 
      <FieldName>RefreshDate</FieldName> 
      <DomainName /> 
      <DefaultValue xsi:type="xs:dateTime">2222-02-22T00:00:00</DefaultValue> 
     </SubtypeFieldInfo> 
     <SubtypeFieldInfo xsi:type="typens:SubtypeFieldInfo"> 
      <FieldName>WOUpdateDate</FieldName> 
      <DomainName /> 
      <DefaultValue xsi:type="xs:dateTime">2222-02-22T00:00:00</DefaultValue> 
     </SubtypeFieldInfo> 
     <SubtypeFieldInfo xsi:type="typens:SubtypeFieldInfo"> 
      <FieldName>Quadrant</FieldName> 
      <DomainName>shdQuadrantZone</DomainName> 
     </SubtypeFieldInfo> 
     <SubtypeFieldInfo xsi:type="typens:SubtypeFieldInfo"> 
      <FieldName>DwgAsbuiltDate</FieldName> 
      <DomainName /> 
      <DefaultValue xsi:type="xs:dateTime">2222-02-22T00:00:00</DefaultValue> 
     </SubtypeFieldInfo> 
     <SubtypeFieldInfo xsi:type="typens:SubtypeFieldInfo"> 
      <FieldName>DwgSignDate</FieldName> 
      <DomainName /> 
      <DefaultValue xsi:type="xs:dateTime">2222-02-22T00:00:00</DefaultValue> 
     </SubtypeFieldInfo> 
     <SubtypeFieldInfo xsi:type="typens:SubtypeFieldInfo"> 
      <FieldName>AcceptanceDate</FieldName> 
      <DomainName /> 
      <DefaultValue xsi:type="xs:dateTime">2222-02-22T00:00:00</DefaultValue> 
     </SubtypeFieldInfo> 
     <SubtypeFieldInfo xsi:type="typens:SubtypeFieldInfo"> 
      <FieldName>IsSyncHansen</FieldName> 
      <DomainName>shdBooleanYesNo</DomainName> 
     </SubtypeFieldInfo> 
     <SubtypeFieldInfo xsi:type="typens:SubtypeFieldInfo"> 
      <FieldName>ImageDate</FieldName> 
      <DomainName /> 
      <DefaultValue xsi:type="xs:dateTime">2222-02-22T00:00:00</DefaultValue> 
     </SubtypeFieldInfo> 
     <SubtypeFieldInfo xsi:type="typens:SubtypeFieldInfo"> 
      <FieldName>ModifiedDate</FieldName> 
      <DomainName /> 
      <DefaultValue xsi:type="xs:dateTime">2222-02-22T00:00:00</DefaultValue> 
     </SubtypeFieldInfo> 
     <SubtypeFieldInfo xsi:type="typens:SubtypeFieldInfo"> 
      <FieldName>CreateDate</FieldName> 
      <DomainName /> 
      <DefaultValue xsi:nil="true" /> 
     </SubtypeFieldInfo> 
     <SubtypeFieldInfo xsi:type="typens:SubtypeFieldInfo"> 
      <FieldName>DwgSheet</FieldName> 
      <DomainName /> 
      <DefaultValue xsi:nil="true" /> 
     </SubtypeFieldInfo> 
     </FieldInfos> 
    </Subtype> 

回答

2

不知道你想刪除哪個節點,所以這裏有兩個選項。

刪除DefaultValue節點:

update YourTable 
set XMLCol.modify('delete (//SubtypeFieldInfo/DefaultValue) 
        [@xsi:type="xs:dateTime" and 
        text() = "2222-02-22T00:00:00"]') 

刪除SubtypeFieldInfo節點:

update YourTable 
set XMLCol.modify('delete (//SubtypeFieldInfo) 
        [DefaultValue/@xsi:type="xs:dateTime" and 
        DefaultValue/text() = "2222-02-22T00:00:00"]') 
+0

@marc_s - 我沒有測試它和它的工作。 –

+1

對不起,'回合 - 是的,你是對的,就像一個魅力! –

+0

謝謝你這是做我想要的。 – Dowlers