次の方法で共有


XML アップデートグラムを使用した、データの挿入 (SQLXML 4.0)

適用対象: SQL Server Azure SQL データベース

アップデートグラムは、レコード インスタンスが <after> ブロックに出現するが、対応する <fore> ブロックには含まれていない場合に挿入操作を示します。 この場合、アップデートグラムは <after> ブロック内のレコードをデータベースに挿入します。

挿入操作のアップデートグラムの形式は次のとおりです。

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
  <updg:sync [mapping-schema="SampleSchema.xml"]  >  
   [<updg:before>  
   </updg:before>]  
    <updg:after [updg:returnid="x y ...] >  
       <ElementName [updg:id="value"]   
                   [updg:at-identity="x"]   
                   [updg:guid="y"]  
                   attribute="value"   
                   attribute="value"  
                   ...  
       />  
      [<ElementName .../>... ]  
    </updg:after>  
  </updg:sync>  
</ROOT>  

<before> Block

挿入操作では、 <fore> ブロックを省略できます。 省略可能な mapping-schema 属性が指定されていない場合、アップデートグラムで指定された <ElementName> はデータベース テーブルにマップされ、子要素または属性はテーブル内の列にマップされます。

<after> Block

<after> ブロックに 1 つ以上のレコードを指定できます。

<以降>ブロックが特定の列の値を指定しない場合、アップデートグラムは注釈付きスキーマで指定されている既定値を使用します (スキーマが指定されている場合)。 スキーマで列の既定値が指定されていない場合、アップデートグラムはこの列に明示的な値を指定せず、代わりに Microsoft SQL Server の既定値 (指定されている場合) をこの列に割り当てます。 SQL Server の既定値がなく、列が NULL 値を受け取る場合、更新プログラムは列の値を NULL に設定します。 列に既定値がなく NULL 値が許容されない場合、コマンドは失敗し、アップデートグラムではエラーが返されます。 省略可能な updg:returnid 属性は、IDENTITY 型の列を持つテーブルにレコードが追加されたときにシステムによって生成される ID 値を返すために使用されます。

updg:id 属性

アップデートグラムがレコードのみを挿入している場合、アップデートグラムには updg:id 属性は必要ありません。 updg:idの詳細については、「 XML アップデートグラムを使用したデータのアップデート (SQLXML 4.0)」を参照してください。

updg:at-identity 属性

アップデートグラムが IDENTITY 型の列を持つテーブルにレコードを挿入すると、アップデートグラムはオプションの updg:at-identity 属性を使用してシステム割り当て値をキャプチャできます。 キャプチャした値は、後続のアップデートグラム操作で使用できます。 アップデートグラムの実行時に、 updg:returnid 属性を指定して生成される ID 値を返すことができます。

updg:guid 属性

updg:guid 属性は、グローバル一意識別子を生成する省略可能な属性です。 この値は、指定された <sync> ブロック全体のスコープ内に残ります。 この値は、 <sync> ブロック内の任意の場所で使用できます。 この属性は、NEWGUID()SQL Server 関数を呼び出して、一意の識別子を生成します。

次の例を使用して作業サンプルを作成するには、「SQLXML の例を実行するための Requirementsで指定されている要件を満たす必要があります。

アップデートグラムの例を使用する前に、次の点に注意してください。

  • ほとんどの例では、アップデートグラムでマッピング スキーマを指定せず、既定のマッピングを使用します。 マッピング スキーマを使用するアップデートグラムのその他の例については、「 アップデートグラム (SQLXML 4.0)での注釈付きマッピング スキーマの指定」を参照してください。

  • ほとんどの例では、AdventureWorks2022 サンプル データベースを使用します。 すべての更新内容は、このデータベースのテーブルに適用されます。

A. アップデートグラムを使用してレコードを挿入する

この属性中心のアップデートグラムでは、AdventureWorks2022 データベース内の HumanResources.Employee テーブルにレコードを挿入します。

この例では、アップデートグラムはマッピング スキーマを指定しません。 したがって、アップデートグラムでは既定のマッピングが使用されます。このマッピングでは、要素名はテーブル名にマップされ、属性または子要素はそのテーブル内の列にマップされます。

HumanResources.Department テーブルに対する AdventureWorks2022 スキーマでは、すべての列に 'not null' 制限が設定されます。 したがって、アップデートグラムには、すべての列に指定する値を含める必要があります。 DepartmentID は IDENTITY 型の列であり、 値は指定しません。

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
  <updg:sync >  
    <updg:before>  
    </updg:before>  
    <updg:after>  
       <HumanResources.Department   
            Name="New Product Research"   
            GroupName="Research and Development"   
            ModifiedDate="2010-08-31"/>  
    </updg:after>  
  </updg:sync>  
</ROOT>  
スキーマに対してサンプル XPath クエリをテストするには
  1. 上のアップデートグラムをコピーして、テキスト ファイルに貼り付け、 MyUpdategram.xml として保存します。

  2. SQLXML 4.0 テスト スクリプト (sqlxml4test.vbs) を作成し、それを使用してテンプレートを実行します。

    詳細については、「ADO を使用した SQLXML 4.0 クエリの実行」を参照してください。

要素中心のマッピングの場合、アップデートグラムは次のようになります。

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
  <updg:sync >  
    <updg:before>  
    </updg:before>  
    <updg:after>  
       <HumanResources.Department>  
            <Name> New Product Research </Name>  
            <GroupName> Research and Development </GroupName>  
            <ModifiedDate>2010-08-31</ModifiedDate>  
       </HumanResources.Department>  
    </updg:after>  
  </updg:sync>  
</ROOT>  

要素中心と属性中心の混合モードのアップデートグラムでは、次のアップデートグラムのように、要素に属性と副要素の両方を含めることができます。

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
  <updg:sync >  
    <updg:before>  
    </updg:before>  
    <updg:after>  
       <HumanResources.Department   
            Name=" New Product Research "   
            <GroupName>Research and Development</GroupName>  
            <ModifiedDate>2010-08-31</ModifiedDate>  
       </HumanResources.Department>  
    </updg:after>  
  </updg:sync>  
</ROOT>  

B. アップデートグラムを使用して複数のレコードを挿入する

このアップデートグラムでは、HumanResources.Shift テーブルに 2 つの新しい勤務時間レコードを追加します。 アップデートグラムでは、省略可能な <fore> ブロックは指定されません。

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
  <updg:sync>  
    <updg:after >  
       <HumanResources.Shift Name="Day-Evening"  
                        StartTime="1900-01-01 11:00:00.000"  
                        EndTime="1900-01-01 19:00:00.000"  
                        ModifiedDate="2004-01-01 00:00:00.000" />  
       <HumanResources.Shift Name="Evening-Night"  
                        StartTime="1900-01-01 19:00:00.000"  
                        EndTime="1900-01-01 03:00:00.000"  
                        ModifiedDate="2004-01-01 00:00:00.000" />  
    </updg:after>  
  </updg:sync>  
</ROOT>  
スキーマに対してサンプル XPath クエリをテストするには
  1. 上のアップデートグラムをコピーして、テキスト ファイルに貼り付け、 Updategram-AddShifts.xml として保存します。

  2. SQLXML 4.0 テスト スクリプト (sqlxml4test.vbs) を作成し、それを使用してテンプレートを実行します。

    詳細については、「ADO を使用した SQLXML 4.0 クエリの実行」を参照してください。

この例のもう 1 つのバージョンは、2 つの従業員を挿入するために 1 つのブロックではなく、2 つの独立した<> ブロックを使用するアップデートグラムです。 これは有効であり、次のようにエンコードできます。

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
  <updg:sync>  
    <updg:after >  
       <HumanResources.Shift Name="Day-Evening"  
                        StartTime="1900-01-01 11:00:00.000"  
                        EndTime="1900-01-01 19:00:00.000"  
                        ModifiedDate="2004-01-01 00:00:00.000" />  
    </updg:after>  
    <updg:before>  
    </updg:before>  
    <updg:after >  
       <HumanResources.Shift Name="Evening-Night"  
                        StartTime="1900-01-01 19:00:00.000"  
                        EndTime="1900-01-01 03:00:00.000"  
                        ModifiedDate="2004-01-01 00:00:00.000" />  
    </updg:after>  
  </updg:sync>  
</ROOT>  

C: SQL Server で有効で、XML では有効でない文字を処理する

SQL Server では、テーブル名に Northwind データベースの Order Details テーブルなどのスペースを含めることができます。 ただし、これは有効な SQL Server 識別子である XML 文字では無効ですが、有効な XML 識別子はエンコード値として '__xHHHH__' を使用してエンコードできます。HHHH は、文字の 4 桁の 16 進数 UCS-2 コードを最も重要なビット優先順で表します。

Note

この例では Northwind データベースを使用します。 Northwind データベースは、この Microsoft Web サイトからダウンロードできる SQL スクリプトを使用してインストールできます

また、要素名は角かっこ ([ ]) で囲む必要があります。 文字 [and] は XML では有効ではないため、それぞれ_x005B_および_x005D_としてエンコードする必要があります。 (マッピング スキーマを使用する場合は、空白など、無効な文字を含まない要素名を指定できます。マッピング スキーマは、必要なマッピングを実行します。したがって、これらの文字に対してエンコードする必要はありません)。

次のアップデートグラムでは、Northwind データベースの Order Details テーブルにレコードを追加します。

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
  <updg:sync >  
    <updg:before>  
    </updg:before>  
    <updg:after>  
      <_x005B_Order_x0020_Details_x005D_ OrderID="1"  
            ProductID="11"  
            UnitPrice="$1.0"  
            Quantity="1"  
            Discount="0.0" />  
    </updg:after>  
  </updg:sync>  
</ROOT>  

Order Details テーブルの UnitPrice 列は、 money 型です。 適切な型変換 ( string から 型から money 型) を適用するには、値の一部としてドル記号 ($) を追加する必要があります。 アップデートグラムでマッピング スキーマが指定されていない場合は、 string 値の最初の文字が評価されます。 最初の文字がドル記号 ($) の場合、適切な変換が行われます。

列が dt:type="fixed.14.4" または sql:datatype="money"として適切にマークされているマッピング スキーマに対してアップデートグラムが指定されている場合、ドル記号 ($) は必要なく、変換はマッピングによって処理されます。 適切な型変換が行われるようにするには、この方法が推奨されます。

スキーマに対してサンプル XPath クエリをテストするには
  1. 上のアップデートグラムをコピーして、テキスト ファイルに貼り付け、 UpdategramSpacesInTableName.xml として保存します。

  2. SQLXML 4.0 テスト スクリプト (sqlxml4test.vbs) を作成し、それを使用してテンプレートを実行します。

    詳細については、「ADO を使用した SQLXML 4.0 クエリの実行」を参照してください。

D. at-identity 属性を使用して、IDENTITY 型の列に挿入されている値を取得する

次のアップデートグラムでは、Sales.SalesOrderHeader テーブルと Sales.SalesOrderDetail テーブルに 1 つずつ、合計 2 つのレコードを挿入します。

このアップデートグラムでは、最初にレコードを Sales.SalesOrderHeader テーブルに追加します。 このテーブルで、SalesOrderID 列は IDENTITY 型の列です。 そのため、このレコードをテーブルに追加すると、アップデートグラムは at-identity 属性を使用して、割り当てられた SalesOrderID 値を "x" (プレースホルダー値) としてキャプチャします。 次に、updategam は、この at-identity 変数を <Sales.SalesOrderDetail> 要素の SalesOrderID 属性の値として指定します。

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
 <updg:sync >  
  <updg:before>  
  </updg:before>  
  <updg:after>  
   <Sales.SalesOrderHeader updg:at-identity="x"   
             RevisionNumber="1"  
             OrderDate="2001-07-01 00:00:00.000"  
             DueDate="2001-07-13 00:00:00.000"  
             OnlineOrderFlag="0"  
             CustomerID="676"  
             ContactID="378"  
             BillToAddressID="985"  
             ShipToAddressID="985"  
             ShipMethodID="5"  
             SubTotal="24643.9362"  
             TaxAmt="1971.5149"  
             Freight="616.0984"  
             rowguid="00001111-2222-3333-4444-556677889900"  
             ModifiedDate="2001-07-08 00:00:00.000" />  
      <Sales.SalesOrderDetail SalesOrderID="x"  
                LineNumber="1"  
                OrderQty="1"  
                ProductID="776"  
                SpecialOfferID="1"  
                UnitPrice="2429.9928"  
                UnitPriceDiscount="0.00"  
                rowguid="aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"  
                ModifiedDate="2001-07-01 00:00:00.000" />  
    </updg:after>  
  </updg:sync>  
</ROOT>  

updg:at-identity 属性によって生成された ID 値を返す場合は、updg:returnid 属性を使用できます。 次のアップデートグラムは、この ID 値を返すように変更されたものです。 例を少し複雑にするため、ここでは 2 つの注文レコードと 2 つの注文詳細レコードを追加します。

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
 <updg:sync>  
  <updg:before>  
  </updg:before>  
  <updg:after updg:returnid="x y" >  
       <HumanResources.Shift updg:at-identity="x" Name="Day-Evening"  
                        StartTime="1900-01-01 11:00:00.000"  
                        EndTime="1900-01-01 19:00:00.000"  
                        ModifiedDate="2004-01-01 00:00:00.000" />  
       <HumanResources.Shift updg:at-identity="y" Name="Evening-Night"  
                        StartTime="1900-01-01 19:00:00.000"  
                        EndTime="1900-01-01 03:00:00.000"  
                        ModifiedDate="2004-01-01 00:00:00.000" />  
  </updg:after>  
 </updg:sync>  
</ROOT>  

アップデートグラムを実行すると、次のような結果が返されます。この結果には、生成された ID 値 (テーブル ID に使用される ShiftID 列の生成値) が含まれます。

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">   
  <returnid>   
    <x>4</x>   
    <y>5</y>   
  </returnid>   
</ROOT>  
スキーマに対してサンプル XPath クエリをテストするには
  1. 上のアップデートグラムをコピーして、テキスト ファイルに貼り付け、 Updategram-returnId.xml として保存します。

  2. SQLXML 4.0 テスト スクリプト (sqlxml4test.vbs) を作成し、それを使用してテンプレートを実行します。

    詳細については、「ADO を使用した SQLXML 4.0 クエリの実行」を参照してください。

E. updg:guid 属性を使用して一意な値を生成する

この例のアップデートグラムでは、Cust および CustOrder テーブルにレコードを挿入します。 また、アップデートグラムは、 updg:guid 属性を使用して CustomerID 属性の一意の値を生成します。

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
  <updg:sync >  
    <updg:before>  
    </updg:before>  
    <updg:after updg:returnid="x" >  
      <Cust updg:guid="x" >  
         <CustID>x</CustID>  
         <LastName>Fuller</LastName>  
      </Cust>  
      <CustOrder>  
         <CustID>x</CustID>  
         <OrderID>1</OrderID>  
      </CustOrder>  
    </updg:after>  
  </updg:sync>  
</ROOT>  

アップデートグラムは、 returnid 属性を指定します。 結果として、生成された GUID が返されます。

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
  <returnid>  
    <x>7111BD1A-7F0B-4CEE-B411-260DADFEFA2A</x>   
  </returnid>  
</ROOT>  
アップデートグラムをテストするには
  1. 上のアップデートグラムをコピーして、テキスト ファイルに貼り付け、 Updategram-GenerateGuid.xml として保存します。

  2. 次のテーブルを作成します。

    USE tempdb  
    CREATE TABLE Cust (CustID uniqueidentifier, LastName varchar(20))  
    CREATE TABLE CustOrder (CustID uniqueidentifier, OrderID int)  
    
  3. SQLXML 4.0 テスト スクリプト (sqlxml4test.vbs) を作成し、それを使用してテンプレートを実行します。

    詳細については、「ADO を使用した SQLXML 4.0 クエリの実行」を参照してください。

F. アップデートグラムでスキーマを指定する

この例のアップデートグラムでは、レコードを次のテーブルに挿入します。

CustOrder(OrderID, EmployeeID, OrderType)  

このアップデートグラムでは XSD スキーマを指定しています。アップデートグラム要素と属性に既定のマッピングはありません。 このスキーマでは、要素および属性からデータベース テーブルおよび列への必要なマッピングが提供されます。

次のスキーマ (CustOrderSchema.xml) では、OrderID および EmployeeID 属性で構成される <CustOrder> 要素について説明します。 スキーマの関心を高めるために、既定値が EmployeeID 属性に割り当てられます。 アップデートグラムでは、属性の既定値は、アップデートグラムでその属性が指定されていない挿入操作のみに使用されます。

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"  
            xmlns:sql="urn:schemas-microsoft-com:mapping-schema">  
  <xsd:element name="CustOrder" >  
   <xsd:complexType>  
        <xsd:attribute name="OrderID"     type="xsd:integer" />   
        <xsd:attribute name="EmployeeID"  type="xsd:integer" />  
        <xsd:attribute name="OrderType  " type="xsd:integer" default="1"/>  
    </xsd:complexType>  
  </xsd:element>  
</xsd:schema>  

このアップデートグラムでは、CustOrder テーブルにレコードを挿入します。 このアップデートグラムでは OrderID および EmployeeID 属性の値のみを指定し、 OrderType 属性の値は指定しません。 したがって、アップデートグラムでは、前のスキーマで指定されている EmployeeID 属性の既定値が使用されます。

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"  
             xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
<updg:sync mapping-schema='CustOrderSchema.xml'>  
<updg:after>  
       <CustOrder OrderID="98000" EmployeeID="1" />  
</updg:after>  
</updg:sync>  
</ROOT>  

マッピング スキーマを指定するアップデートグラムのその他の例については、「 アップデートグラムでの注釈付きマッピング スキーマの指定 (SQLXML 4.0)」を参照してください。

アップデートグラムをテストするには
  1. tempdb データベースに次のテーブルを作成します。

    USE tempdb  
    CREATE TABLE CustOrder(  
                     OrderID int,   
                     EmployeeID int,   
                     OrderType int)  
    
  2. 上のスキーマをコピーして、テキスト ファイルに貼り付け、 CustOrderSchema.xml として保存します。

  3. 上のアップデートグラムをコピーして、テキスト ファイルに貼り付け、 上の手順と同じフォルダーに CustOrderUpdategram.xml として保存します。

  4. SQLXML 4.0 テスト スクリプト (Sqlxml4test.vbs) を作成し、それを使用してアップデートグラムを実行します。

    詳細については、「ADO を使用した SQLXML 4.0 クエリの実行」を参照してください。

これは同等の XDR スキーマです。

<Schema xmlns="urn:schemas-microsoft-com:xml-data"  
        xmlns:sql="urn:schemas-microsoft-com:xml-sql">  
 <ElementType name="CustOrder" >  
    <AttributeType name="OrderID" />  
    <AttributeType name="EmployeeID" />  
    <AttributeType name="OrderType" default="1" />  
    <attribute type="OrderID"  />  
    <attribute type="EmployeeID" />  
    <attribute type="OrderType" />  
  </ElementType>  
</Schema>  

G. xsi:nil 属性を使用して列に null 値を挿入する

テーブル内の対応する列に null 値を挿入する場合は、アップデートグラム内の要素に xsi:nil 属性を指定できます。 対応する XSD スキーマでは、XSD nillable 属性も指定する必要があります。

たとえば、次の XSD スキーマを考えてみます。

<?xml version="1.0"?>  
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"   
            xmlns:sql="urn:schemas-microsoft-com:mapping-schema">  
<xsd:element name="Student" sql:relation="Students">  
  <xsd:complexType>  
    <xsd:all>  
      <xsd:element name="fname" sql:field="first_name"   
                                type="xsd:string"   
                                 nillable="true"/>  
    </xsd:all>  
    <xsd:attribute name="SID"   
                        sql:field="StudentID"  
                        type="xsd:ID"/>      
    <xsd:attribute name="lname"       
                        sql:field="last_name"  
                        type="xsd:string"/>  
    <xsd:attribute name="minitial"    
                        sql:field="middle_initial"   
                        type="xsd:string"/>  
    <xsd:attribute name="years"       
                         sql:field="no_of_years"  
                         type="xsd:integer"/>  
  </xsd:complexType>  
 </xsd:element>  
</xsd:schema>  

XSD スキーマは、<fname> 要素のnillable="true"を指定します。 このスキーマを使用するアップデートグラムは次のとおりです。

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"  
      xmlns:updg="urn:schemas-microsoft-com:xml-updategram"  
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">  
  
<updg:sync mapping-schema='StudentSchema.xml'>  
  <updg:before/>  
  <updg:after>  
    <Student SID="S00004" lname="Elmaci" minitial="" years="2">  
      <fname xsi:nil="true">  
    </fname>  
    </Student>  
  </updg:after>  
</updg:sync>  
  
</ROOT>  

アップデートグラムは、<after> ブロック内の<fname>要素に対してxsi:nilを指定します。 したがって、このアップデートグラムを実行すると、テーブルの first_name 列に NULL 値が挿入されます。

アップデートグラムをテストするには
  1. tempdb データベースに次の表を作成します。

    USE tempdb  
    CREATE TABLE Students (  
       StudentID char(6)NOT NULL ,  
       first_name varchar(50),  
       last_name varchar(50),  
       middle_initial char(1),  
       no_of_years int NULL)  
    GO  
    
  2. 上のスキーマをコピーして、テキスト ファイルに貼り付け、 StudentSchema.xml として保存します。

  3. 上のアップデートグラムをコピーして、テキスト ファイルに貼り付け、 上の手順の StudentSchema.xml と同じフォルダーに StudentUpdategram.xml として保存します。

  4. SQLXML 4.0 テスト スクリプト (Sqlxml4test.vbs) を作成し、それを使用してアップデートグラムを実行します。

    詳細については、「ADO を使用した SQLXML 4.0 クエリの実行」を参照してください。

H. アップデートグラムで名前空間を指定する

アップデートグラム内の要素で名前空間を宣言し、その名前空間に属する要素として、同じ要素を保持することができます。 この場合、対応するスキーマで同じ名前空間を宣言する必要があり、対象の名前空間に要素が属している必要があります。

たとえば、次のアップデートグラム (UpdateGram-ElementHavingNamespace.xml) では、 <Order> 要素は、その要素で宣言された名前空間に属しています。

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
  <updg:sync mapping-schema='XSD-ElementHavingNameSpace.xml'>  
    <updg:after>  
       <x:Order  xmlns:x="https://server/xyz/schemas/"  
             updg:at-identity="SalesOrderID"   
             RevisionNumber="1"  
             OrderDate="2001-07-01 00:00:00.000"  
             DueDate="2001-07-13 00:00:00.000"  
             OnlineOrderFlag="0"  
             CustomerID="676"  
             ContactID="378"  
             BillToAddressID="985"  
             ShipToAddressID="985"  
             ShipMethodID="5"  
             SubTotal="24643.9362"  
             TaxAmt="1971.5149"  
             Freight="616.0984"  
             rowguid="00009999-8888-7777-6666-554433221100"  
             ModifiedDate="2001-07-08 00:00:00.000" />  
    </updg:after>  
  </updg:sync>  
</ROOT>  

この場合、このスキーマに示すように、スキーマでも名前空間を宣言する必要があります。

次のスキーマ (XSD-ElementHavingNamespace.xml) では、対応する要素と属性の宣言方法を示しています。

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"   
     xmlns:dt="urn:schemas-microsoft-com:datatypes"   
     xmlns:sql="urn:schemas-microsoft-com:mapping-schema"    
     xmlns:x="https://server/xyz/schemas/"   
     targetNamespace="https://server/xyz/schemas/" >  
  <xsd:element name="Order" sql:relation="Sales.SalesOrderHeader" type="x:Order_type"/>  
  <xsd:complexType name="Order_type">  
    <xsd:attribute name="SalesOrderID"  type="xsd:ID"/>  
    <xsd:attribute name="RevisionNumber" type="xsd:unsignedByte"/>  
    <xsd:attribute name="OrderDate" type="xsd:dateTime"/>  
    <xsd:attribute name="DueDate" type="xsd:dateTime"/>  
    <xsd:attribute name="ShipDate" type="xsd:dateTime"/>  
    <xsd:attribute name="Status" type="xsd:unsignedByte"/>  
    <xsd:attribute name="OnlineOrderFlag" type="xsd:boolean"/>  
    <xsd:attribute name="SalesOrderNumber" type="xsd:string"/>  
    <xsd:attribute name="PurchaseOrderNumber" type="xsd:string"/>  
    <xsd:attribute name="AccountNumber" type="xsd:string"/>  
    <xsd:attribute name="CustomerID" type="xsd:int"/>  
    <xsd:attribute name="ContactID" type="xsd:int"/>  
    <xsd:attribute name="SalesPersonID" type="xsd:int"/>  
    <xsd:attribute name="TerritoryID" type="xsd:int"/>  
    <xsd:attribute name="BillToAddressID" type="xsd:int"/>  
    <xsd:attribute name="ShipToAddressID" type="xsd:int"/>  
    <xsd:attribute name="ShipMethodID" type="xsd:int"/>  
    <xsd:attribute name="CreditCardID" type="xsd:int"/>  
    <xsd:attribute name="CreditCardApprovalCode" type="xsd:string"/>  
    <xsd:attribute name="CurrencyRateID" type="xsd:int"/>  
    <xsd:attribute name="SubTotal" type="xsd:decimal"/>  
    <xsd:attribute name="TaxAmt" type="xsd:decimal"/>  
    <xsd:attribute name="Freight" type="xsd:decimal"/>  
    <xsd:attribute name="TotalDue" type="xsd:decimal"/>  
    <xsd:attribute name="Comment" type="xsd:string"/>  
    <xsd:attribute name="rowguid" type="xsd:string"/>  
    <xsd:attribute name="ModifiedDate" type="xsd:dateTime"/>  
  </xsd:complexType>  
</xsd:schema>  
アップデートグラムをテストするには
  1. 上のスキーマをコピーして、テキスト ファイルに貼り付け、 XSD-ElementHavingNamespace.xml として保存します。

  2. 上のアップデートグラムをコピーして、テキスト ファイルに貼り付け、 XSD-ElementHavingnamespace.xml と同じフォルダーに Updategram-ElementHavingNamespace.xml として保存します。

  3. SQLXML 4.0 テスト スクリプト (Sqlxml4test.vbs) を作成し、それを使用してアップデートグラムを実行します。

    詳細については、「ADO を使用した SQLXML 4.0 クエリの実行」を参照してください。

I. XML データ型列にデータを挿入する

xml データ型は SQL Server 2005 (9.x) で導入されました。 アップデートグラムを使用すると、 xml データ型の列に格納されているデータを挿入および更新できます。

  • xml列を使用して既存の行を識別することはできません。 そのため、アップデートグラムの updg:before セクションに含めることはできません。

  • xml 列に挿入された XML フラグメントのスコープ内にある名前空間は保持され、その名前空間宣言は挿入されたフラグメントの最上位要素に追加されます。

たとえば、次のアップデートグラム (SampleUpdateGram.xml) では、<Desc> 要素は、AdventureWorks2022 サンプル データベースの Production>productModel テーブルの ProductDescription 列を更新します。 このアップデートグラムの結果、ProductDescription 列の XML コンテンツは、 <Desc> 要素の XML コンテンツで更新されます。

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">  
    <updg:sync mapping-schema="SampleSchema.xml" >  
       <updg:before>  
<ProductModel ProductModelID="19">  
   <Name>Mountain-100</Name>  
</ProductModel>  
    </updg:before>  
    <updg:after>  
 <ProductModel>  
    <Name>Mountain-100</Name>  
    <Desc><?xml-stylesheet href="ProductDescription.xsl" type="text/xsl"?>  
        <p1:ProductDescription xmlns:p1="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription"   
              xmlns:wm="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain"   
              xmlns:wf="https://www.adventure-works.com/schemas/OtherFeatures"   
              xmlns:html="http://www.w3.org/1999/xhtml"   
              xmlns="">  
  <p1:Summary>  
     <html:p>Insert Example</html:p>  
  </p1:Summary>  
  <p1:Manufacturer>  
    <p1:Name>AdventureWorks</p1:Name>  
    <p1:Copyright>2002</p1:Copyright>  
    <p1:ProductURL>HTTP://www.Adventure-works.com</p1:ProductURL>  
  </p1:Manufacturer>  
  <p1:Features>These are the product highlights.   
    <wm:Warranty>  
       <wm:WarrantyPeriod>3 years</wm:WarrantyPeriod>  
       <wm:Description>parts and labor</wm:Description>  
    </wm:Warranty>  
    <wm:Maintenance>  
       <wm:NoOfYears>10 years</wm:NoOfYears>  
       <wm:Description>maintenance contract available through your dealer or any AdventureWorks retail store.</wm:Description>  
    </wm:Maintenance>  
    <wf:wheel>High performance wheels.</wf:wheel>  
    <wf:saddle>  
      <html:i>Anatomic design</html:i> and made from durable leather for a full-day of riding in comfort.</wf:saddle>  
    <wf:pedal>  
       <html:b>Top-of-the-line</html:b> clipless pedals with adjustable tension.</wf:pedal>  
    <wf:BikeFrame>Each frame is hand-crafted in our Bothell facility to the optimum diameter and wall-thickness required of a premium mountain frame. The heat-treated welded aluminum frame has a larger diameter tube that absorbs the bumps.</wf:BikeFrame>  
    <wf:crankset> Triple crankset; aluminum crank arm; flawless shifting. </wf:crankset>  
   </p1:Features>  
   <p1:Picture>  
      <p1:Angle>front</p1:Angle>  
      <p1:Size>small</p1:Size>  
      <p1:ProductPhotoID>118</p1:ProductPhotoID>  
   </p1:Picture>  
   <p1:Specifications> These are the product specifications.  
     <Material>Aluminum Alloy</Material>  
     <Color>Available in most colors</Color>  
     <ProductLine>Mountain bike</ProductLine>  
     <Style>Unisex</Style>  
     <RiderExperience>Advanced to Professional riders</RiderExperience>  
   </p1:Specifications>  
  </p1:ProductDescription>  
 </Desc>  
      </ProductModel>  
    </updg:after>  
  </updg:sync>  
</ROOT>  

このアップデートグラムでは、次の注釈付き XSD スキーマ (SampleSchema.xml) を参照しています。

<?xml version="1.0" encoding="utf-8" ?>  
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"   
           xmlns:sql="urn:schemas-microsoft-com:mapping-schema"  
           xmlns="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription">   
  <xsd:element name="ProductModel"  sql:relation="Production.ProductModel" >  
     <xsd:complexType>  
       <xsd:sequence>  
          <xsd:element name="Name" type="xsd:string"></xsd:element>  
          <xsd:element name="Desc" sql:field="CatalogDescription" sql:datatype="xml">  
           <xsd:complexType>  
            <xsd:sequence>  
              <xsd:element name="ProductDescription">  
                 <xsd:complexType>  
                   <xsd:sequence>  
                     <xsd:element name="Summary" type="xsd:anyType">  
                     </xsd:element>  
                   </xsd:sequence>  
                 </xsd:complexType>  
              </xsd:element>  
            </xsd:sequence>  
           </xsd:complexType>  
          </xsd:element>   
       </xsd:sequence>  
       <xsd:attribute name="ProductModelID" sql:field="ProductModelID"/>  
     </xsd:complexType>  
  </xsd:element>  
</xsd:schema>  
アップデートグラムをテストするには
  1. 上のスキーマをコピーして、テキスト ファイルに貼り付け、 XSD-SampleSchema.xml として保存します。

    Note

    アップデートグラムでは既定のマッピングがサポートされているため、 xml データ型の先頭と末尾を識別する方法はありません。 つまり、 xml データ型の列を使用してテーブルを挿入または更新するときに、マッピング スキーマが必要になります。 スキーマを指定しない場合、SQLXML では、テーブル内の列の 1 つが見つからないというエラーが返されます。

  2. 上のアップデートグラムをコピーして、テキスト ファイルに貼り付け、 SampleSchema.xml と同じフォルダーに SampleUpdategram.xml として保存します。

  3. SQLXML 4.0 テスト スクリプト (Sqlxml4test.vbs) を作成し、それを使用してアップデートグラムを実行します。

    詳細については、「ADO を使用した SQLXML 4.0 クエリの実行」を参照してください。

参照

アップデートグラムのセキュリティに関する考慮事項 (SQLXML 4.0)