Публикации
Последние новости:
 
Высокие технологии
Technology
Компьютерное железо
Программное обеспечение
Компьютерная безопасность
Операционные системы
Компьютерный справочник
БД
Интернет сегодня
AudioТехника
Средства связи
Весь спектр цифровой техники
Мир авто
Бизнес-финансы
Всё о культуре
ПроСпорт
Всё о компьютерах
Детское чтение
Мировые телекоммуникации
Пресс-релизы
 
Статьи
Мир культуры
Интересно о спорте
Покупаем:
ТурТранс
Для прекрасных дам
Усадьба, дом
 

Платный хостинг от провайдера HostSpace.com.ua - хостинг, регистрация доменов. Поддержка PHP, MySQL, почта - в каждом тарифном плане.





Microsoft SQL Server 2000: поддержка XML


Алексей Федоров, КомпьютерПресс









В этой статье мы ознакомимся с некоторыми новыми возможностями Microsoft SQL Server 2000, связанными с поддержкой языка XML. Мы рассмотрим использование SQL-запросов через URL, использование XML-шаблонов, XDR-схем и XPath-запросов, а также приведем некоторые примеры работы с механизмом updategrams, позволяющим применять XML-шаблоны для вставки, удаления и обновления данных. Cтатья подразумевает, что читатели знакомы с XML, XSL и SQL-запросами.

Настройка Web-сервера


Прежде чем мы сможем начать использование поддержки XML в Microsoft SQL Server 2000, нам необходимо произвести ряд настроек Web-сервера. Для этого следует выполнить команду Programs | Microsoft SQL Server | Configure SQL XML Support in IIS и указать ряд параметров в панели IIS Virtual Directory Management for SQL Server.


Рис.1.

Щелкните мышью по элементу Default Web Site и выполните команду New | Virtual Directory. Появится диалоговая панель New Virtual Directory Properties, состоящая из ряда вкладок. В табл.1 показаны настройки на компьютере автора.

Таблица 1

Вкладка General

Вкладка Security

Вкладка Data Source

Вкладка Settings

Вкладка Virtual Names

Вкладка Advanced

Virtual Directory Name Northwind
Local Path c:\inetpub\northwind
Установите параметры согласно вашему способу обращения к SQL Server
SQL Server local
Database Northwind
Allow URL Queries
Allow Template Queries
Allow XPath
Allow POST  
Виртуальный каталог northwind Тип dbobject
Виртуальный каталог templates Тип template, физический каталог c:\inetpub\northwind\templates
На этой вкладке можно установить дополнительные параметры OLE DB-провайдера для Microsoft SQL Server. Подробнее см. Books Online

URL-запросы


Используя созданный выше виртуальный каталог, мы можем выполнять запросы к базе данных Northwind, помещая их непосредственно в URL. Чтобы проверить эту возможность в действии, запустим браузер Microsoft Internet Explorer и введем в строке Address следующий URL:

http://terra/northwind?sql= _
SELECT+*+FROM+Customers+FOR+XML+AUTO&root=ROOT

Результат (в виде XML) отображается в браузере так, как показано на рис.2.


Рис.2.

Рассмотрим указанный нами адрес более подробно. Он состоит из следующих частей:

  • типа протокола — http;
  • имени сервера и виртуального каталога — terra/northinwd. Если вы используете локальный сервер, то в качестве имени сервера можете указать localhost;
  • параметра sql;
  • собственно SQL-запроса —
    SELECT+*+FROM+Customers+FOR+XML+AUTO&root=ROOT
  • Этот запрос практически не отличается от обычного запроса, выполняемого нами в коде или в Query Analyzer. Заметим, что пробелы в нем заменены на знак «+» (это требование форматирования URL) и в конце запроса добавлена директива FOR XML AUTO. Собственно, эта директива и указывает SQL Server на необходимость генерации XML вместо обычного набора данных. Наш URL-запрос завершается заданием корневого элемента XML-документа — это необходимо в тех случаях, когда мы используем директиву FOR XML AUTO и получаем более одной «записи».

    Как видно из приведенного примера, при использовании директивы FOR XML AUTO мы получаем XML-документ, где значения полей представлены в виде атрибутов элемента, имя которого соответствует имени запрашиваемой таблицы:

    <Customers 
     CustomerID="ALFKI" 
     CompanyName="Alfreds Futterkiste" 
     ContactName="Maria Anders" 
     ContactTitle="Sales Representative" 
     Address="Obere Str. 57" 
     City="Berlin" 
     PostalCode="12209" 
     Country="Germany" 
     Phone="030-0074321" 
     Fax="030-0076545" 
    /> 

    Чтобы получить XML-документ, в котором значения полей представлены дочерними элементами, следует использовать ключевое слово Elements:

    http://terra/northwind?sql=SELECT+*+FROM+Customers+FOR+XML+AUTO,ELEMENTS&root=Northwind

    Результат выполнения этого запроса показан на рис.3.


    Рис.3.

    Одна из записей в таблице Customers будет представлена в виде следующего XML-элемента и его дочерних элементов:

    <Customers> 
      <CustomerID>ALFKI</CustomerID> 
      <CompanyName>Alfreds Futterkiste</CompanyName> 
      <ContactName>Maria Anders</ContactName> 
      <ContactTitle>Sales Representative</ContactTitle> 
      <Address>Obere Str. 57</Address> 
      <City>Berlin</City> 
      <PostalCode>12209</PostalCode> 
      <Country>Germany</Country> 
      <Phone>030-0074321</Phone> 
      <Fax>030-0076545</Fax> 
    </Customers> 

    Отметим, что директива FOR XML AUTO создает структурированный XML-документ в тех случаях, когда используются более сложные запросы. Например, запрос:

    SELECT Customers.CustomerID, Customers.ContactName, 
           Orders.OrderID, Orders.CustomerID 
    FROM Customers 
    INNER JOIN Orders 
    ON Customers.CustomerID = Orders.CustomerID
    

    возвращает набор записей из двух таблиц, содержащий идентификаторы всех заказов, выполненных всеми клиентами. Фрагмент такого набора записей показан в табл. 2.

    Таблица 2

    CustomerID

    ContactName

    OrderID

    CustomerID

    ALFKI Maria Anders 10643 ALFKI
    ALFKI Maria Anders 10692 ALFKI
    ALFKI Maria Anders 10702 ALFKI
    ALFKI Maria Anders 10835 ALFKI
    ALFKI Maria Anders 10952 ALFKI
    ALFKI Maria Anders 11011 ALFKI
    ANATR Ana Trujillo 10308 ANATR
    ANATR Ana Trujillo 10625 ANATR
    ANATR Ana Trujillo 10759 ANATR
    ANATR Ana Trujillo 10926 ANATR
    ... ... ... ...

    Выполнив этот же запрос с использованием директивы FOR XML AUTO, мы получим структурированный XML-документ, показанный на рис.4.


    Рис.4.

    <Customers CustomerID="ALFKI" ContactName="Maria Anders"> 
    <Orders OrderID="10643" CustomerID="ALFKI"/> 
    <Orders OrderID="10692" CustomerID="ALFKI"/> 
    <Orders OrderID="10702" CustomerID="ALFKI"/> 
    <Orders OrderID="10835" CustomerID="ALFKI"/> 
    <Orders OrderID="10952" CustomerID="ALFKI"/> 
    <Orders OrderID="11011" CustomerID="ALFKI"/> 
    </Customers> 
    <Customers CustomerID="ANATR" ContactName="Ana Trujillo"> 
    <Orders OrderID="10308" CustomerID="ANATR"/> 
    <Orders OrderID="10625" CustomerID="ANATR"/> 
    <Orders OrderID="10759" CustomerID="ANATR"/> 
    <Orders OrderID="10926" CustomerID="ANATR"/> 
    </Customers> 

    Поддержка XML в Microsoft SQL Server 2000 не ограничивается возможностью выполнения простых URL-запросов. Помимо этого мы можем использовать хранимые процедуры и XML-шаблоны. Эти темы мы рассмотрим в следующих разделах.

    Использование хранимых процедур


    Запустим Query Analyzer и введем код, который определяет хранимую процедуру sp_GetXML, возвращающую данные о клиенте, имя которого задано первой буквой:

    IF EXISTS (SELECT name FROM sysobjects 
       WHERE name=sp_GetXML AND type=P) 
       DROP PROCEDURE sp_getXML 
    GO 
      
    CREATE PROCEDURE sp_GetXML( 
     @CID varchar(5) 
    ) 
    AS 
     BEGIN 
      SELECT CustomerID, CompanyName, ContactName 
      FROM Customers 
      WHERE CustomerID LIKE @CID + % 
      FOR XML AUTO 
     END 

    Как и в случае с рассмотренными выше SQL-запросами, мы используем директиву FOR XML AUTO для указания SQL Server на то, что мы хотим получить XML-документ. Чтобы выполнить хранимую процедуру в URL-запросе, необходимо указать в браузере следующий адрес (рис. 5):


    Рис.5.

    http://terra/northwind?sql=exec+sp_GetXML+A&root=Northwind 

    Если же нам необходим более структурированный XML-документ, значения полей в котором хранятся как атрибуты, в директиве FOR XML AUTO необходимо добавить ключевое слово Elements. В результате мы получим документ, показанный на рис. 5.

    Отметим, что использование хранимых процедур более предпочтительно непосредственному указанию SQL-запроса в URL. В первую очередь по соображениям безопасности, во вторую — с точки зрения универсальности кода. Как видно в последнем примере, для изменения XML-документа достаточно изменить лишь код хранимой процедуры — сам URL-запрос остается таким же. Впрочем, как только мы расскажем, что ту или иную базу данных можно запрашивать через URL, кому-нибудь обязательно захочется выполнить команды INSERT, UPDATE или DELETE…

    Использование XML-шаблонов


    Чтобы полностью обезопасить нашу базу данных от непредвиденной активности, но сохранить при этом возможность генерации XML-документов, мы должны использовать XML-шаблоны. Идея использования данных шаблонов заключается в том, что мы помещаем SQL-запрос в XML-документ и запрещаем выполнение сервером запросов, находящихся в URL. Для этого необходимо отключить опцию Allow URL Queries на вкладке Settings в панели New Virtual Directory Properties.

    Затем следует перейти на вкладку Virtual Names и задать новый каталог — в нашем примере это будет каталог Templates типа template, находящийся в физическом каталоге C:\Inetpub\Northwind\Templates.

    Теперь мы готовы приступить к использованию XML-шаблонов. Начнем с создания шаблона, в котором воспользуемся написанным нами ранее SQL-шаблоном:

    SELECT Customers.CustomerID, Customers.ContactName, 
           Orders.OrderID, Orders.CustomerID 
    FROM Customers 
    INNER JOIN Orders 
    ON Customers.CustomerID = Orders.CustomerID 
    XML-шаблон для выполнения этого запроса будет выглядеть так:
    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> 
     <sql:query> 
       SELECT Customers.CustomerID, Customers.ContactName, 
              Orders.OrderID, Orders.CustomerID 
       FROM Customers 
       INNER JOIN Orders 
       ON Customers.CustomerID = Orders.CustomerID 
       FOR XML AUTO
     </sql:query> 
    </ROOT> 

    Выделенным шрифтом показаны различия между обычным SQL-запросом и XML-шаблоном на его основе. В этом XML-документе мы используем пространство имен sql (urn:schemas-microsoft-com:xml-sql) и элемент query данного пространства имен. Для выполнения такого шаблона и получения XML-документа необходимо указать имя шаблона в URL (шаблон находится в файле LIST1.XML в подкаталоге Templates):

    http://terra/northwind/templates/list1.xml

    Результат выполнения этого запроса будет точно таким же, что и при использовании SQL-запроса в URL, но сам запрос базируется на XML-шаблоне. Как и в случае с хранимыми процедурами, мы можем изменить текст шаблона, не меняя самого URL-запроса. Например, если мы захотим структурировать XML-документ и добавить ключевое слово Elements, мы должны сделать это в XML-шаблоне.

    XML-шаблоны имеют еще одно преимущество по сравнению с обычными SQL-запросами в URL и использованием хранимых процедур: в шаблонах мы можем указать XSL-шаблон и таким образом вместо XML- получать, например, HTML-документы, текстовые документы и т.п. Ниже мы рассмотрим пример использования XML- и XSL-шаблонов для генерации HTML-документов.

    Сначала создадим еще один XML-шаблон, на этот раз более простой, чем мы рассматривали выше. Вот текст этого шаблона:

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> 
     <sql:query> 
       SELECT FirstName, LastName, Title, Notes 
       FROM Employees 
       FOR XML AUTO 
     </sql:query> 
    </ROOT> 

    Сохраним этот шаблон в файле с именем LIST2.XML и выполним его. Как и следовало ожидать, мы получаем XML-документ. Для того чтобы превратить его в HTML-документ, необходимо создать XSL-шаблон. В нашем примере мы будем отображать данные о каждом сотруднике в виде одного ряда в таблице. Вот текст XSL-шаблона:

    <?xml version=1.0 encoding=UTF-8?> 
    <xsl:stylesheet xmlns:xsl=http://www.w3.org/TR/WD-xsl 
     version=1.0> 
     <xsl:template match=*> 
      <xsl:apply-templates /> 
     </xsl:template> 
     <xsl:template match=Employees> 
      <TR> 
       <TD><xsl:value-of select=@FirstName /></TD> 
       <TD><xsl:value-of select=@LastName  /></TD> 
       <TD><xsl:value-of select=@Title /></TD> 
       <TD><xsl:value-of select=@Notes /></TD> 
      </TR> 
     </xsl:template> 
     <xsl:template match=/> 
      <HTML> 
       <BODY> 
        <TABLE BORDER=1> 
         <TR> 
          <TH COLSPAN=4>Employees</TH> 
         </TR> 
         <xsl:apply-templates select=ROOT />  
        </TABLE> 
       </BODY> 
      </HTML> 
     </xsl:template> 
    </xsl:stylesheet> 

    Для того чтобы указать используемый XSL-шаблон, необходимо изменить первую строку описанного выше XML-шаблона; изменения показаны выделенным шрифтом.

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql" 
     sql:xsl=list2.xsl> 

    Вызвав данный XML-шаблон в браузере, мы получим результат трансформации нашего XML-документа в HTML-документ, представленный в виде... XML-документа, показанного на рис. 6.

    Чтобы превратить этот документ в реальный HTML-документ, в конце URL необходимо добавить параметр contenttype=text/html. Теперь результат преобразования полностью соответствует нашим ожиданиям (рис. 8):


    Рис.8.

    Отметим, что XSL-шаблоны можно указывать и в качестве параметров. Для этого в конец URL следует добавить имя файла в виде &xsl=list2.xsl.

    Завершим наше рассмотрение использования XML-шаблонов кратким примером использования параметров в шаблонах. Вернемся к нашему предыдущему шаблону:

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> 
     <sql:query> 
       SELECT FirstName, LastName, Title, Notes 
       FROM Employees 
       FOR XML AUTO 
     </sql:query> 
    </ROOT> 

    Он содержит SQL-запрос, возвращающий данные о каждом сотруднике в таблице Employees. Если мы хотим получать данные только об одном сотруднике, нам необходимо задать в нашем XML-шаблоне параметры. Для этого надо добавить элемент <sql:header>, описать передаваемый параметр посредством элемента <sql:param> и изменить код самого SQL-запроса. Ниже выделенным шрифтом показаны изменения, внесенные в наш XML-шаблон.

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> 
     <sql:header> 
      <sql:param name=EmpID>1</sql:param> 
     </sql:header> 
     <sql:query> 
       SELECT FirstName, LastName, Title, Notes 
       FROM Employees 
       WHERE EmployeeID = @EmpID 
       FOR XML AUTO 
     </sql:query> 
    </ROOT> 

    Теперь мы можем указывать идентификатор сотрудника при вызове нашего шаблона:

    http://terra/northwind/templates/list2a.xml?EmpID=2 

    Таким образом, механизм XML-шаблонов предоставляет более гибкие средства для извлечения данных, в том числе и возможность их трансформации.

    XDR-схемы и XPath-запросы


    Помимо рассмотренных выше способов извлечения данных, SQL Server 2000 поддерживает XPath-запросы, называемые также XPath-представлениями. XPath — это язык запросов, позволяющий выбирать отдельные элементы XML-документа. Более подробно язык XPath описан в документе «XML Path Language (XPath Version 1.0: W3C Recommendation 16 November 1999)», доступном на Web-сайте World Wide Web Consortium по адресу: http://www.w3.org/tr/xpath.

    Для создания подобного запроса мы должны выполнить два действия. Во-первых, создать XDR-схему, описывающую, как элементы документа отображаются на поля таблицы базы данных. Во-вторых, написать XML-шаблон, содержащий XPath-запрос на основе данной схемы.

    Для нашего примера создадим XDR-схему, описывающую отображение полей таблицы Employees на элементы XML-документа. Шаблон для нашей схемы выглядит следующим образом:

    <?xml version="1.0" ?>
    <Schema xmlns="urn:schemas-microsoft-com:xml-data"
            xmlns:sql="urn:schemas-microsoft-com:xml-sql"
            xmlns:dt="urn:schemas-microsoft-com:datatypes">
       ...
    </Schema>
    

    Здесь мы задаем пространство имен urn:schemas-microsoft-com:xml-data, используемое для описания данных, и определяем два пространства имен, используемых в нашем документе, — sql (urn:schemas-microsoft-com:xml-sql) и dt (urn:schemas-microsoft-com:datatypes)

    Добавим в наш шаблон элемент <Employee>, имеющий атрибуты EmpID, FName и LName.

    <ElementType name="Employee" >
        <AttributeType name="EmpID" />
        <AttributeType name="FName" />
        <AttributeType name="LName" />
     
        <attribute type="EmpID" />
        <attribute type="FName" />
        <attribute type="LName" />
    </ElementType>
    

    После того как элемент описан, мы должны указать, как его атрибуты отображаются на атрибуты таблицы базы данных. Для этого используем директиву sql:relation, указывающую таблицу базы данных, и директиву sql:field, указывающую поле, на которое отображается атрибут. Полная XDR-схема для нашего примера показана ниже.

    <?xml version="1.0" ?> 
    <Schema xmlns="urn:schemas-microsoft-com:xml-data" 
            xmlns:dt="urn:schemas-microsoft-com:datatypes" 
            xmlns:sql="urn:schemas-microsoft-com:xml-sql"> 
      
    <ElementType name="Employee" sql:relation="Employees" > 
        <AttributeType name="EmpID" /> 
        <AttributeType name="FName" /> 
        <AttributeType name="LName" /> 
      
        <attribute type="EmpID" sql:field="EmployeeID" /> 
        <attribute type="FName" sql:field="FirstName" /> 
        <attribute type="LName" sql:field="LastName" /> 
    </ElementType> 
    </Schema> 

    Теперь мы можем сохранить эту схему в файле LIST3.XDR и написать XPath-представление, которое будет применять данную схему для извлечения данных. Сначала создадим простой запрос, использующий фиксированный параметр:

    <Northwind xmlns:sql=urn:schemas-microsoft-com:xml-sql> 
     <sql:xpath-query mapping-schema=list3.xdr> 
      /Employee 
     </sql:xpath-query> 
    </Northwind> 

    Отметим, что директива sql:xpath-query необходима для указания используемой нами XDR-схемы. Если мы вызовем это представление через URL — http://www.terra/northwind/templates/list3.xml, то получим XML-документ, содержащий список всех сотрудников (поля EmployeeID, FirstName, LastName таблицы Employees), в котором каждый из них представлен отдельным элементом Employee (рис. 9).


    Рис.9.

    Приведенный выше пример — это самое простое из того, что можно делать с XPath-представлениями. Отметим, что в отличие от обычных SQL-запросов через URL мы получаем возможность определять структуру XML-документа и названия элементов и атрибутов. Эта функциональность намного проще использования директивы FOR XML EXPLICIT.

    Изменим XPath-запрос на следующий:

    /Employee[@FName=Nancy] 

    Выполнив данное представление, мы получим данные об одной сотруднице — Nancy Davolio. Теперь, если мы хотим передавать нашему представлению параметры, нужно изменить его исходный текст на следующий:

    <Northwind xmlns:sql=urn:schemas-microsoft-com:xml-sql> 
    <sql:header> 
     <sql:param name=FName>Nancy</sql:param> 
    </sql:header> 
     <sql:xpath-query mapping-schema=list3.xdr> 
      /Employee[@FName=$FName] 
     </sql:xpath-query> 
    </Northwind> 

    Обратите внимание на то, что мы добавили описание параметра (директива sql:param) и изменили текст XPath-запроса. Для вызова данного представления через URL введите следующий адрес:

    http://terra/northwind/templates/list3.xml?FName=Andrew 

    Результат выполнения нашего запроса — данные о сотруднике с именем Andrew — показан на рис.10.


    Рис.10.

    Отметим, что для создания комплексных XDR-схем можно воспользоваться утилитой XML View Mapper, бесплатно распространяемой фирмой Microsoft.

    Вставка, удаление и обновление данных


    Все операции с XML-документами, рассмотренные выше, позволяли нам извлекать данные, указывая тот или иной критерий. Ниже мы расскажем, как воспользоваться поддержкой XML в Microsoft SQL Server 2000 для вставки, удаления и обновления данных, другими словами — как можно выполнить операции INSERT, UPDATE и DELETE.

    Для выполнения операций вставки, удаления и обновления данных Microsoft SQL Server 2000 поддерживает механизм updategrams — специальный XML-синтаксис, позволяющий описать данные до и после операции.

    Данный механизм находится в состоянии бета-тестирования. Для того чтобы им воспользоваться, необходимо загрузить с Web-сайта фирмы Microsoft пакет Microsoft SQL Server XML Tools и установить его на компьютере, где инсталлирован SQL Server 2000.

    Идея механизма updategrams очень проста: если описанные данные до операции отличаются от данных после операции, выполняется обновление данных. Например, если блок «до» содержал данные, а блок «после» — нет, данные удаляются, если данные в блоках «до» и «после» различны — выполняется обновление, а если данные присутствуют только в блоке «после», то выполняется вставка данных.

    Ниже показан шаблон, используемый механизмом updategrams.

    <ROOT xmlns:updg=urn:schames-microsoft-com: 
      xml-updategram> 
     <updg:sync> 
      <updg:before> 
       <TABLENAME [updg:id=value] 
         col=value 
         col=value .... /> 
      </updg:before> 
      <updg:after> 
       <TABLENAME [updg:id=value] 
        [updg:at-identity=value] 
         col=value 
         col=value .... /> 
      </updg:after> 
     <updg:sync>  
    </ROOT> 

    Первое, что бросается в глаза, — это то, что updategrams похожи на рассмотренные нами выше XML-шаблоны. Они также начинаются с корневого элемента и описания пространства имен. Но вместо префикса sql мы указываем префикс updg и связываем его с адресом urn:schames-microsoft-com: xml-updategram. Кроме того, можно заметить новый элемент sync, являющийся контейнером для описания данных до (before) и после (after) операции. Данный блок синхронизации описывает транзакцию: если любая операция внутри блока завершится с ошибкой, будут отменены все операции. Имя таблицы, имена колонок и их значения (до и после операции) используются для определения типа операции — вставка, удаление или обновление. Таким образом, все, что необходимо сделать для выполнения той или иной операции, — это задать соответствующие данные.

    После того как мы ознакомились с теорией updategrams, давайте рассмотрим примеры использования этого механизма. Начнем со вставки новой записи в таблицу Employees — добавим нового сотрудника с именем John Smith, занимающего позицию Accounting Manager:

    <ROOT xmlns:updg="urn:schemas-microsoft-com: 
     xml-updategram"> 
      <updg:sync> 
        <updg:before> 
        </updg:before> 
        <updg:after> 
           <Employees FirstName=John 
             LastName=Smith 
             Title=Accounting Manager /> 
        </updg:after> 
      </updg:sync> 
    </ROOT> 

    Обратите внимание на то, как описываются данные в случае операции вставки: блок before пуст, а блок after содержит новые данные.

    После того как мы вставили новую запись, мы можем обновить некоторые из ее полей. Например, добавить дату рождения сотрудника:

    <ROOT xmlns:updg="urn:schemas-microsoft-com: 
     xml-updategram"> 
      <updg:sync> 
        <updg:before> 
           <Employees EmployeeID=10 /> 
        </updg:before> 
        <updg:after> 
           <Employees BirthDate=1960-10-22 /> 
        </updg:after> 
      </updg:sync> 
    </ROOT> 

    Обратите внимание, что в этом случае в блоке before мы указываем идентификатор записи, а в блоке after — обновляемые данные. Может возникнуть вполне резонный вопрос: как в случае вставки данных мы узнаем идентификатор новой записи (значение поля EmployeeID для нашей новой записи)? В механизме updategrams для этой цели предусмотрены директивы returnid и at-identity, пример использования которых показан ниже.

    <ROOT xmlns:updg="urn:schemas-microsoft-com: 
     xml-updategram"> 
      <updg:sync> 
        <updg:before> 
        </updg:before> 
        <updg:after updg:returnid="EmpID"> 
           <Employees updg:at-identity="EmpID" 
             FirstName=John 
             LastName=Smith 
             Title=Accounting Manager /> 
        </updg:after> 
      </updg:sync> 
    </ROOT> 

    В случае выполнения такого набора XML-инструкций в результирующем документе будет возвращено значение поля EmployeeID для нашей новой записи:

    <ROOT xmlns:updg="urn:schemas-microsoft-com: 
      xml-updategram"> 
      <returnid><EmpID>10</EmpID></returnid> 
    </ROOT> 

    Наконец, используя механизм updategrams, мы можем удалять записи. Например:

    <ROOT xmlns:updg="urn:schemas-microsoft-com: 
      xml-updategram"> 
      <updg:sync> 
        <updg:before> 
           <Employees EmployeeID=10 /> 
        </updg:before> 
        <updg:after> 
        </updg:after> 
      </updg:sync> 
    </ROOT> 

    В этом случае мы заполняем лишь блок before, оставляя пустым блок after. Это указывает SQL Server на необходимость удаления записей, соответствующих заданному в блоке before критерию.

    Завершая обсуждение механизма updategrams, следует сказать несколько слов об использовании параметров. Для задания параметров мы используем префикс updg:param и атрибут name, располагая описание параметров в секции <updg:header>. Например, для обновления данных мы используем следующий код:

    <ROOT xmlns:updg="urn:schemas-microsoft-com: 
     xml-updategram"> 
      <updg:header> 
       <updg:param name=EmployeeID> 
       <updg:param name=LastName> 
      </updg:header> 
      <updg:sync> 
        <updg:before> 
           <Employees EmployeeID=$EmployeeID /> 
        </updg:before> 
        <updg:after> 
           <Employees LastName=$LastName /> 
        </updg:after> 
      </updg:sync> 
    </ROOT> 

    В приведенном выше шаблоне мы указали два параметра: EmployeeID и LastName. При вызове шаблона мы задаем параметры так:

    http://terra/northwind/templates/emp_update.xml?EmployeeID=1&LastName=Johnson 

    Помимо рассмотренных здесь способов использования механизма updategrams для вставки, обновления и удаления данных можно выполнять более комплексные операции — изменять более одной записи в рамках одного шаблона, использовать более одной таблицы и задавать XDR-схемы для указания соответствия полей. Эти, а также другие возможности Microsoft SQL Server XML Tools — темы отдельной статьи.

    Заключение


    В данной статье мы ознакомились с некоторыми новыми возможностями Microsoft SQL Server 2000. Мы рассмотрели основные шаги для настройки Web-сервера, синтаксис URL-запросов, использование хранимых процедур и XML-шаблонов, а также извлечение данных с помощью XDR-схем и XPath-запросов. Далее мы поговорим об основных операциях, которые можно выполнять с помощью механизма updategrams.

    Разумеется, в рамках одной статьи невозможно полностью раскрыть такую комплексную тему, как поддержка XML в Microsoft SQL Server 2000. В следующих номерах мы ознакомимся с утилитой для создания XDR-схем, а также рассмотрим вопросы, связанные с использованием поддержки XML в Microsoft SQL Server 2000 из ASP-страниц, и опишем, как эта технология поддерживается в ASP. Net и в рамках всей платформы Microsoft. Net.




    www.sdteam.com

    БД 08-09-2006

    SAP покупает компанию Visiprise 07-07-2008 БД
    Европейский производитель корпоративного программного обеспечения SAP планирует купить компанию Visiprise, занимающуюся созданием софта для корпоративного и производственного планирования. Сделка, финансовые условия которой не разглашаются, будет закрыта в июле этого года.После завершения покупки, все разработки Visiprise будут интегрированы в программное обеспечение SAP для автоматизации бизнес-процессов и комплексной интеграции производственных...


    SAP занялась продажей индивидуальных лицензий 08-10-2007 БД
    SAP представила новый тип лицензии на программное обеспечение NetWeaver, используемое для автоматизации деятельности компаний. Новая лицензия представляет собой годовую подписку и ориентирована она на индивидуальных разработчиков.В компании говорят, что ранее SAP занималась лишь продажей лицензий компаниям, теперь индивидуальные пользователи смогут купить годовую лицензию. Для этого им необходимо будет присоединиться к сети SAP developer network ...


    Oracle купила компанию Netsure Telecom 05-09-2007 БД
    Oracle сегодня сообщила о покупке компании Netsure Telecom Limited, производителя средств для обеспечения безопасности сетей, исследования данных в сетях и общего анализа корпоративных сетей.Основная задача программного обеспечения Netsure Teleocm - это комплексная диагностика критически важных крупных сетей. Среди клиентов купленной компании есть и крупнейшие операторы связи - Vodafone, Cable&Wireless, Eircom и ряд других.Компания Netsure являет...


    Москву посетил Президент Oracle Чарльз Филлипс 19-08-2007 БД
    Сегодня в рамках московской пресс-конференции Президента Oracle Чарльза Филлипса было объявлено об итогах 30-летнего развития корпорации и ее продуктов, а также представлена глобальная стратегия Oracle.В программе четырехдневного визита руководителя Oracle в Москву и Санкт-Петербург - встречи с ключевыми клиентами и партнерами, эффективно использующими технологии и бизнес-приложения Oracle в России.По итогам 2007 финансового года, годовой доход O...

    Вооруженные силы Грузии внедрили систему управления ресурсами SAP 13-07-2007 БД
    Специалисты украинского НИИ автоматизированных компьютерных систем «Экотех» (НИИ АКС «Экотех») совместно со специалистами главного исполнителя проекта – грузинской компании «UGT», при участии «SAP Украина», завершили этап создания Концептуального проекта по внедрению интегрированной системы управления ресурсами предприятия SAP ERP в Вооруженных Силах (ВС) Грузии.По словам министра обороны  Грузии Давида Кезерашвили, прое...

    Oracle представляет СУБД Oracle Database 11g 10-07-2007 БД
    Корпорация Oracle завтра представит новую версию своего основного и самого популярного продукта - СУБД Oracle Database 11g. Новая версия станет самым значимым обновлением системы управления базами данных за последние 4 года.Однако бума скачиваний и покупок новой версии вряд ли стоит ожидать. Дело в том, что СУБД, равно как и другие продукты Oracle, рассчитаны на корпоративный сектор, причем сектор довольно крупных компаний. Данный сегмент являетс...
     
    При любом использовании материалов сайта ссылка на сайт www.archive.com.ua обязательна.
    Rambler's Top100 Рейтинг@Mail.ru