次の方法で共有


XML アップデートグラムを使用してデータを挿入する (SQLXML 4.0)

適用対象:SQL ServerAzure SQL データベース

アップデートグラムは、レコード インスタンスが <after> ブロック内に表示され、対応する <before> ブロックには表示されない場合に挿入操作を示します。 この場合、アップデートグラムは <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> ブロック

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

<after> ブロック

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

<after> ブロックが特定の列の値を指定しない場合、アップデートグラムは注釈付きスキーマで指定されている既定値を使用します (スキーマが指定されている場合)。 スキーマで列の既定値が指定されていない場合、アップデートグラムはこの列に明示的な値を指定せず、代わりに 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)での注釈付きマッピング スキーマの指定」を参照してください。

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

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

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

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

HumanResources.Department テーブルに対する AdventureWorks2025 スキーマでは、すべての列に '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 つの新しいシフト レコードを追加します。 アップデートグラムでは、省略可能な <before> ブロックは指定されません。

<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 つの個別の <after> ブロックを使用するアップデートグラムです。 これは有効であり、次のようにエンコードできます。

<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: XML で無効な有効な SQL Server 文字を操作する

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

列が 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 型の列に挿入された値を取得します。

次のアップデートグラムでは、2 つのレコードが挿入されます。1 つは Sales.SalesOrderHeader テーブルに、もう 1 つは Sales.SalesOrderDetail テーブルに挿入されます。

最初に、アップデートグラムは Sales.SalesOrderHeader テーブルにレコードを追加します。 このテーブルでは、SalesOrderID 列は IDENTITY型の列です。 したがって、このレコードをテーブルに追加すると、アップデートグラムは at-identity 属性を使用して、割り当てられた SalesOrderID 値を "x" (プレースホルダー値) としてキャプチャします。 その後、Updategram は、この 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) では、<CustOrder>属性とOrderID属性で構成されるEmployeeID要素について説明します。 スキーマの関心を高めるために、既定値が 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 スキーマは、nillable="true"要素の<fname>を指定します。 このスキーマを使用するアップデートグラムは次のとおりです。

<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>

アップデートグラムは、xsi:nil ブロック内の<fname>要素の<after>を指定します。 したがって、このアップデートグラムを実行すると、テーブルの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. 前のアップデートグラムをコピーし、テキスト ファイルに貼り付けます。 StudentUpdategram.xmlを保存するために、前の手順で使用したのと同じフォルダーにファイルをStudentSchema.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. 前のアップデートグラムをコピーし、テキスト ファイルに貼り付けます。 Updategram-ElementHavingNamespace.xmlの保存に使用したのと同じフォルダーにファイルをXSD-ElementHavingnamespace.xmlとして保存します。

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

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

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

アップデートグラムを使用すると、 xml データ型の列に格納されているデータを挿入および更新できます。次の点に注意してください。

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

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

たとえば、次のアップデートグラム (SampleUpdateGram.xml) では、<Desc>要素は、> サンプル データベースの ProductionAdventureWorks2025productModel テーブルの 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 href="ProductDescription.xsl" type="text/xsl" e="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. 前のアップデートグラムをコピーし、テキスト ファイルに貼り付けます。 SampleUpdategram.xmlの保存に使用したのと同じフォルダーにファイルをSampleSchema.xmlとして保存します。

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

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