Sdílet prostřednictvím


Vložení dat pomocí aktualgramů XML (SQLXML 4.0)

platí pro:SQL Serverazure SQL Database

Aktualizační diagram označuje operaci vložení, když se instance záznamu <after> zobrazí v bloku, ale ne v odpovídajícím <before> bloku. V tomto případě aktualgram vloží záznam do <after> bloku do databáze.

Toto je formát aktualizačního diagramu pro operaci vložení:

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

blok <before>

Blok <before> lze vynechat pro operaci vložení. Pokud není zadaný volitelný mapping-schema atribut, <ElementName> ten se v aktualgramu mapuje na tabulku databáze a podřízené elementy nebo atributy mapované na sloupce v tabulce.

blok <after>

V bloku můžete zadat jeden nebo více záznamů <after> .

<after> Pokud blok nezadává hodnotu pro určitý sloupec, aktualizační diagram použije výchozí hodnotu zadanou v anotovaném schématu (pokud bylo schéma zadáno). Pokud schéma nezadá výchozí hodnotu pro sloupec, aktualogram nezadá do tohoto sloupce žádnou explicitní hodnotu a místo toho přiřadí k tomuto sloupci výchozí hodnotu SQL Serveru (pokud je zadána). Pokud neexistuje žádná výchozí hodnota SQL Serveru a sloupec přijme NULL hodnotu, updategram nastaví hodnotu sloupce na NULLhodnotu . Pokud sloupec nemá výchozí hodnotu nebo přijme NULL hodnotu, příkaz selže a aktualogram vrátí chybu. Volitelný updg:returnid atribut se používá k vrácení hodnoty identity, která je generována systémem při přidání záznamu do tabulky se sloupcem IDENTITY-type.

atribut updg:id

Pokud aktualgram vkládá jenom záznamy, aktualizační diagram nevyžaduje updg:id atribut. Další informace o updg:idaktualizaci dat pomocí aktualgramů XML (SQLXML 4.0)

atribut updg:at-identity

Když aktualogram vloží záznam do tabulky se IDENTITYsloupcem -type, může aktualgram zachytit systém přiřazenou hodnotu pomocí volitelného updg:at-identity atributu. Aktualizační diagram pak může tuto hodnotu použít v následných operacích. Při spuštění aktualizačního diagramu můžete vrátit hodnotu identity vygenerovanou zadáním atributu updg:returnid .

atribut updg:guid

Atribut updg:guid je volitelný atribut, který generuje globálně jedinečný identifikátor. Tato hodnota zůstává v oboru pro celý <sync> blok, ve kterém je zadán. Tuto hodnotu můžete použít kdekoli v <sync> bloku. Atribut volá NEWGUID() funkci SQL Serveru pro vygenerování jedinečného identifikátoru.

Examples

Pokud chcete vytvořit pracovní ukázky pomocí následujících příkladů, musíte splňovat požadavky uvedené v části Požadavky pro spouštění příkladů SQLXML.

Než použijete příklady aktualgramu, zvažte následující:

  • Většina příkladů používá výchozí mapování (to znamená, že v aktualgramu není zadané žádné schéma mapování). Další příklady aktualizačních diagramů, které používají schémata mapování, najdete v tématu Určení schématu mapování s poznámkami v aktualgramu (SQLXML 4.0).

  • Většina příkladů používá ukázkovou AdventureWorks2025 databázi. Všechny aktualizace se použijí na tabulky v této databázi.

A. Vložení záznamu pomocí aktualizačního diagramu

Tento aktualgram orientovaný na atribut vloží záznam do HumanResources.Employee tabulky v AdventureWorks2025 databázi.

V tomto příkladu aktualgram neurčí schéma mapování. Aktualgram proto používá výchozí mapování, ve kterém se název elementu mapuje na název tabulky a atributy nebo podřízené prvky mapované na sloupce v této tabulce.

Schéma AdventureWorks2025 pro tabulku HumanResources.Department představuje omezení not null pro všechny sloupce. Proto musí aktualizační diagram obsahovat hodnoty zadané pro všechny sloupce. ID oddělení je IDENTITYsloupec typu -type. Proto nejsou pro ni zadány žádné hodnoty.

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

Otestování ukázkového dotazu XPath na schématu

  1. Zkopírujte předchozí aktualizační diagram a vložte ho do textového souboru. Uložte soubor jako MyUpdategram.xml.

  2. Vytvořte a použijte testovací skript SQLXML 4.0 (Sqlxml4test.vbs) ke spuštění šablony.

    Další informace naleznete v tématu Použití ADO ke spouštění dotazů SQLXML 4.0.

V mapování zaměřeném na element vypadá aktualizační diagram takto:

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

V aktualizačním diagramu zaměřeném na element a atribut může mít prvek atributy i dílčí prvky, jak je znázorněno v tomto aktualgramu:

<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. Vložení více záznamů pomocí aktualizačního diagramu

Tento aktualogram přidá do HumanResources.Shift tabulky dva nové záznamy shift. Aktualgram nezadá volitelný <before> blok.

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

Otestování ukázkového dotazu XPath na schématu

  1. Zkopírujte předchozí aktualizační diagram a vložte ho do textového souboru. Uložte soubor jako Updategram-AddShifts.xml.

  2. Vytvořte a použijte testovací skript SQLXML 4.0 (Sqlxml4test.vbs) ke spuštění šablony.

    Další informace naleznete v tématu Použití ADO ke spouštění dotazů SQLXML 4.0.

Další verzí tohoto příkladu je aktualizační diagram, který k vložení dvou zaměstnanců používá dva samostatné <after> bloky místo jednoho bloku. Toto je platné a lze ho zakódovat následujícím způsobem:

<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. Práce s platnými znaky SQL Serveru, které nejsou platné v XML

V SQL Serveru můžou názvy tabulek obsahovat mezeru, například tabulku Podrobnosti objednávky v databázi Northwind. To však není platné ve znacích XML, které jsou platné identifikátory SQL Serveru, ale ne platné identifikátory XML lze kódovat jako _xHHHH_ kódovací hodnota, kde HHHH je zkratka čtyřmístného šestnáctkového kódu UCS-2 pro znak v nejvýznamnějším bit-first pořadí.

Poznámka:

Tento příklad používá databázi Northwind. Databázi Northwind můžete nainstalovat pomocí skriptu SQL, který je k dispozici ke stažení z tohoto webu společnosti Microsoft.

Název elementu musí být také uzavřený v hranatých závorkách ([ ]). Vzhledem k tomu, že znaky [a] nejsou v jazyce XML platné, musíte je zakódovat jako _x005B_ a _x005D_v uvedeném pořadí. (Pokud používáte schéma mapování, můžete zadat názvy prvků, které neobsahují znaky, které nejsou platné, například prázdné znaky. Schéma mapování provede nezbytné mapování; proto pro tyto znaky nemusíte kódovat).

Tento aktualizační diagram přidá záznam do tabulky Podrobnosti objednávky v databázi Northwind:

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

Sloupec UnitPrice v tabulce Podrobnosti objednávky je typu peněz . Chcete-li použít odpovídající převod typu (z typu řetězce na typ peněz ), musí být znak dolaru ($) přidán jako součást hodnoty. Pokud aktualogram neurčuje schéma mapování, vyhodnotí se první znak řetězcové hodnoty. Pokud je prvním znakem znak dolaru ($), použije se příslušný převod.

Pokud je aktualogram zadán proti schématu mapování, kde je sloupec správně označen jako buď dt:type="fixed.14.4" nebo sql:datatype="money", znak dolaru ($) není vyžadován a převod je zpracován mapováním. Toto je doporučený způsob, jak zajistit, aby došlo k převodu příslušného typu.

Otestování ukázkového dotazu XPath na schématu

  1. Zkopírujte předchozí aktualizační diagram a vložte ho do textového souboru. Uložte soubor jako UpdategramSpacesInTableName.xml.

  2. Vytvořte a použijte testovací skript SQLXML 4.0 (Sqlxml4test.vbs) ke spuštění šablony.

    Další informace naleznete v tématu Použití ADO ke spouštění dotazů SQLXML 4.0.

D. Pomocí atributu at-identity načtěte hodnotu, která byla vložena do sloupce typu IDENTITY.

Následující aktualogram vloží dva záznamy: jeden v Sales.SalesOrderHeader tabulce a druhý v Sales.SalesOrderDetail tabulce.

Nejprve aktualizační diagram přidá záznam do Sales.SalesOrderHeader tabulky. V této tabulce je IDENTITYsloupec SalesOrderID sloupec -type. Proto když tento záznam přidáte do tabulky, aktualgram použije at-identity atribut k zachycení přiřazené hodnoty SalesOrderID jako "x" (zástupná hodnota). Updategram pak určuje tuto at-identity proměnnou jako hodnotu SalesOrderID atributu <Sales.SalesOrderDetail> elementu.

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

Pokud chcete vrátit hodnotu identity vygenerovanou atributem updg:at-identity , můžete použít updg:returnid atribut. Následující příklad je revidovaný aktualizační diagram, který vrací tuto hodnotu identity. (Tento aktualogram přidá dva záznamy objednávek a dva záznamy podrobností objednávky, aby byl příklad trochu složitější.)

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

Při spuštění aktualizačního diagramu vrátí výsledky podobné následujícímu příkladu, který obsahuje hodnotu identity (vygenerovanou hodnotu sloupce ShiftID použitého pro identitu tabulky), který se vygeneroval:

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
  <returnid>
    <x>4</x>
    <y>5</y>
  </returnid>
</ROOT>

Otestování ukázkového dotazu XPath na schématu

  1. Zkopírujte předchozí aktualizační diagram a vložte ho do textového souboru. Uložte soubor jako Updategram-returnId.xml.

  2. Vytvořte a použijte testovací skript SQLXML 4.0 (Sqlxml4test.vbs) ke spuštění šablony.

    Další informace naleznete v tématu Použití ADO ke spouštění dotazů SQLXML 4.0.

E. Použití atributu updg:guid k vygenerování jedinečné hodnoty

V tomto příkladu aktualizační diagram vloží záznam do tabulek Cust a CustOrder. Aktualgram také vygeneruje jedinečnou hodnotu atributu CustomerID pomocí atributu updg:guid .

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

Aktualgram určuje returnid atribut. V důsledku toho se vrátí vygenerovaný identifikátor GUID:

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
  <returnid>
    <x>7111BD1A-7F0B-4CEE-B411-260DADFEFA2A</x>
  </returnid>
</ROOT>

Test aktualizačního diagramu

  1. Zkopírujte předchozí aktualizační diagram a vložte ho do textového souboru. Uložte soubor jako Updategram-GenerateGuid.xml.

  2. Vytvořte tyto tabulky:

    USE tempdb;
    
    CREATE TABLE Cust
    (
        CustID UNIQUEIDENTIFIER,
        LastName VARCHAR (20)
    );
    
    CREATE TABLE CustOrder
    (
        CustID UNIQUEIDENTIFIER,
        OrderID INT
    );
    
  3. Vytvořte a použijte testovací skript SQLXML 4.0 (Sqlxml4test.vbs) ke spuštění šablony.

    Další informace naleznete v tématu Použití ADO ke spouštění dotazů SQLXML 4.0.

F. Zadání schématu v aktualgramu

Aktualgram v tomto příkladu vloží záznam do následující tabulky:

CustOrder(OrderID, EmployeeID, OrderType)

V tomto aktualgramu je zadáno schéma XSD (to znamená, že neexistuje žádné výchozí mapování elementů a atributů aktualgramu). Schéma poskytuje nezbytné mapování prvků a atributů na databázové tabulky a sloupce.

Následující schéma (CustOrderSchema.xml) popisuje <CustOrder> prvek, který se skládá z OrderID atributů EmployeeID . Aby bylo schéma zajímavější, je k atributu EmployeeID přiřazena výchozí hodnota. Aktualgram používá výchozí hodnotu atributu pouze pro operace vložení a pak pouze v případě, že aktualizační diagram tento atribut nezadá.

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

Tento aktualizační diagram vloží záznam do tabulky CustOrder. Aktualgram určuje pouze hodnoty atributu OrderID a EmployeeID. Nezadá hodnotu atributu OrderType. Proto aktualgram používá výchozí hodnotu atributu EmployeeID, který je zadán v předchozím schématu.

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

Další příklady aktualizačních diagramů, které určují schéma mapování, najdete v tématu Určení schématu mapování s poznámkami v aktualgramu (SQLXML 4.0).

Test aktualizačního diagramu

  1. Vytvořte tuto tabulku v tempdb databázi:

    USE tempdb;
    
    CREATE TABLE CustOrder
    (
        OrderID INT,
        EmployeeID INT,
        OrderType INT
    );
    
  2. Zkopírujte předchozí schéma a vložte ho do textového souboru. Uložte soubor jako CustOrderSchema.xml.

  3. Zkopírujte předchozí aktualizační diagram a vložte ho do textového souboru. Uložte soubor jako CustOrderUpdategram.xml ve stejné složce použité v předchozím kroku.

  4. Vytvořte a použijte testovací skript SQLXML 4.0 (Sqlxml4test.vbs) ke spuštění aktualizačního diagramu.

    Další informace naleznete v tématu Použití ADO ke spouštění dotazů SQLXML 4.0.

Toto je ekvivalentní schéma 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. Vložení hodnot null do sloupce pomocí atributu xsi:nil

Pokud chcete vložit hodnotu null do odpovídajícího sloupce v tabulce, můžete zadat xsi:nil atribut prvku v aktualgramu. V odpovídajícím schématu XSD musí být zadán také atribut XSD nillable .

Představte si například toto schéma 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>

Schéma XSD určuje nillable="true" prvek <fname> . Toto schéma používá následující aktualizační diagram:

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

Aktualgram určuje xsi:nil prvek <fname> v <after> bloku. Proto při spuštění tohoto aktualgramu NULL je vložena hodnota pro first_name sloupec v tabulce.

Test aktualizačního diagramu

  1. V databázi vytvořte následující tabulku 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. Zkopírujte předchozí schéma a vložte ho do textového souboru. Uložte soubor jako StudentSchema.xml.

  3. Zkopírujte předchozí aktualizační diagram a vložte ho do textového souboru. Uložte soubor jako StudentUpdategram.xml ve stejné složce použité v předchozím kroku k uložení StudentSchema.xml.

  4. Vytvořte a použijte testovací skript SQLXML 4.0 (Sqlxml4test.vbs) ke spuštění aktualizačního diagramu.

    Další informace naleznete v tématu Použití ADO ke spouštění dotazů SQLXML 4.0.

H. Určení oborů názvů v aktualgramu

V aktualgramu můžete mít prvky, které patří do oboru názvů deklarovaného ve stejném prvku v aktualgramu. V tomto případě musí odpovídající schéma také deklarovat stejný obor názvů a element musí patřit do tohoto cílového oboru názvů.

Například v následujícím aktualgramu (UpdateGram-ElementHavingNamespace.xml), <Order> element patří do oboru názvů deklarovaného v elementu.

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

V tomto případě musí schéma deklarovat také obor názvů, jak je znázorněno v tomto schématu:

Následující schéma (XSD-ElementHavingNamespace.xml) ukazuje, jak musí být deklarován odpovídající prvek a atributy.

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

Test aktualizačního diagramu

  1. Zkopírujte předchozí schéma a vložte ho do textového souboru. Uložte soubor jako XSD-ElementHavingNamespace.xml.

  2. Zkopírujte předchozí aktualizační diagram a vložte ho do textového souboru. Uložte soubor jako Updategram-ElementHavingNamespace.xml ve stejné složce použité k uložení XSD-ElementHavingnamespace.xml.

  3. Vytvořte a použijte testovací skript SQLXML 4.0 (Sqlxml4test.vbs) ke spuštění aktualizačního diagramu.

    Další informace naleznete v tématu Použití ADO ke spouštění dotazů SQLXML 4.0.

I. Vložení dat do sloupce datového typu XML

Pomocí aktualgramů můžete vkládat a aktualizovat data uložená ve sloupcích datového typu XML s následujícími aspekty:

  • Sloupec XML nelze použít k identifikaci existujícího řádku. Proto ho nelze zahrnout do updg:before části aktualizačního diagramu.

  • Obory názvů, které jsou v oboru fragmentu XML vloženého do sloupce XML , se zachovají a jejich deklarace oboru názvů se přidají do horního prvku vloženého fragmentu.

Například v následujícím aktualogramu (SampleUpdateGram.xml) <Desc> element aktualizuje sloupec ProductDescription v tabulce Production>productModel v AdventureWorks2025 ukázkové databázi. Výsledkem tohoto aktualgramu je, že obsah XML sloupce ProductDescription se aktualizuje obsahem XML elementu <Desc> .

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

Aktualgram odkazuje na následující anotované schéma 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>
Test aktualizačního diagramu
  1. Zkopírujte předchozí schéma a vložte ho do textového souboru. Uložte soubor jako XSD-SampleSchema.xml.

    Poznámka:

    Vzhledem k tomu, že updategramy podporují výchozí mapování, neexistuje způsob, jak identifikovat začátek a konec datového typu XML . To znamená, že při vkládání nebo aktualizaci tabulek pomocí sloupců datového typu XML se vyžaduje schéma mapování. Pokud schéma není zadané, vrátí SQLXML chybu, která značí, že v tabulce chybí jeden ze sloupců.

  2. Zkopírujte předchozí aktualizační diagram a vložte ho do textového souboru. Uložte soubor jako SampleUpdategram.xml ve stejné složce použité k uložení SampleSchema.xml.

  3. Vytvořte a použijte testovací skript SQLXML 4.0 (Sqlxml4test.vbs) ke spuštění aktualizačního diagramu.

    Další informace naleznete v tématu Použití ADO ke spouštění dotazů SQLXML 4.0.