2012-01-15 7 views
4

の要素を置き換える:SQL Server 2008の検索と次の表のXML列

CREATE TABLE [dbo].[GDB_ITEMS](
    [ObjectID] [int] NOT NULL, 
    [UUID] [uniqueidentifier] NOT NULL, 
    [Type] [uniqueidentifier] NOT NULL, 
    [Name] [nvarchar](226) NULL, 
    [PhysicalName] [nvarchar](226) NULL, 
    [Path] [nvarchar](512) NULL, 
    [Url] [nvarchar](255) NULL, 
    [Properties] [int] NULL, 
    [Defaults] [varbinary](max) NULL, 
    [DatasetSubtype1] [int] NULL, 
    [DatasetSubtype2] [int] NULL, 
    [DatasetInfo1] [nvarchar](255) NULL, 
    [DatasetInfo2] [nvarchar](255) NULL, 
    [Definition] [xml] NULL, 
    [Documentation] [xml] NULL, 
    [ItemInfo] [xml] NULL, 
    [Shape] [geometry] NULL, 
CONSTRAINT [R2_pk] PRIMARY KEY CLUSTERED 
(
    [ObjectID] ASC 
) 

ALTER TABLE [dbo].[GDB_ITEMS] WITH CHECK ADD CONSTRAINT [g1_ck] CHECK (([Shape].[STSrid]=(4326))) 
GO 

[Documentation]列には、数百のXMLアイテムと要素が含まれています。これにより

<NPS_Info> 
    <MetaPurp>NPS</MetaPurp> 
    <NPS_Unit> 
     <UnitCode>MANDATORY for Data Store: NPS Alpha Unit Code (ACAD)</UnitCode> 
     <UnitType>MANDATORY for Data Store: NPS Unit Type (National Park, National Monument, etc)</UnitType> 
    </NPS_Unit> 
    </NPS_Info> 

<NPS_Info> 
    <MetaPurp>NPS</MetaPurp> 
    <MetaPurp>CSDGM</MetaPurp> 
    <MetaPurp>OnlineData</MetaPurp> 
    <NPS_Unit> 
    <UnitCode>ABCD</UnitCode> 
    <UnitType>Park</UnitType> 
    </NPS_Unit> 
    <DatStore> 
    <Category>Landscape</Category> 
    <Category>Monitoring</Category> 
    <Category>Resource Management</Category> 
    <DSteward> 
     <cntinfo> 
     <cntperp> 
      <cntper>Something</cntper> 
     </cntperp> 
     <cntaddr> 
      <addrtype>mailing and physical</addrtype> 
      <address>1 Smith Lane</address> 
      <address></address> 
      <city>Anywhere</city> 
      <state>ST</state> 
      <postal>12345</postal> 
     </cntaddr> 
     <cntemail>[email protected]</cntemail> 
     </cntinfo> 
    </DSteward> 
    </DatStore> 
</NPS_Info> 

私の不器用なカットnを許してください。」ペースト私は、T-SQLで、に把握要素の1シリーズを置き換えるしようとしています。この表には数千の行がありますが、すべてが最初のコードブロックに記述されているxml要素を持っているわけではありません(DB内のすべての表の説明を保持するグローバル表です。この操作に関心のない関連するXML)。

答えて

3

あなたはこのコードでは、変数@XML内のコンテンツとNPS_Infoという名前最初ノードの内容を変更しますXML Data Modification Language (XML DML)

を使用することができます。 SE Data

+0

-- Delete everything in node NPS_Info update YourTable set XMLCol.modify('delete //NPS_Info[1]/*') -- Insert @XML to node NPS_Info update YourTable set XMLCol.modify('insert sql:variable("@XML") into (//NPS_Info)[1]') 

ワーキングサンプル ありがとうねえ!そのコードブロックを試してみると:dbnameを使用します。 @T dbo.gdb_items(Documentation xml)を宣言します。メッセージ102、レベル15、状態1、行5 'Documentation'の近くに構文が正しくありません。 メッセージ1087、レベル15、状態2、行7 表変数 "@T"を宣言する必要があります。 メッセージ1087、レベル15、状態2、行54 表変数 "@T"を宣言する必要があります。 メッセージ1087、レベル15、状態2、行57 テーブル変数 "@T"を宣言する必要があります。 メッセージレベル108、レベル15、状態2、行61 表変数 "@T"を宣言しなければならない非常に明白な何かが欠落している必要があります – tpcolson

+1

....私はあなたがSEで行ったことを見て、非一時的な環境で働くように変更しました。本当にありがとう! – tpcolson

関連する問題