Режимы RAW, AUTO, EXPLICIT




В конструкции FOR XML задают один из следующих режимов XML: RAW, AUTO или EXPLICIT. Режим XML определяет форму результирующего набора XML. Режим XML действует при исполнении лишь того запроса, для которого он установлен, и не влияет на результат всех последующих запросов.

Режим RAW

Режим RAW трансформирует каждую строку результата запроса в элемент XML с идентификатором, соответствующим идентификатору строки. Каждое непустое поле представляется атрибутом элемента XML, имя которого совпадает с именем поля.

Для возврата закодированных двоичных данных в формате base64 в запросе следует задать параметр BINARY BASE64. В режиме RAW извлечение двоичных данных вызывает ошибку, если не задан параметр BINARY BASE64.

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

Режим AUTO

Режим AUTO возвращает результат в виде вложенных элементов ХМ L. Каждая указанная в конструкции FROM таблица если хотя бы один ее столбец находится в списке конструкции SELECT, представлена в виде элемента XML. Столбцы из списка конструкции SELECT соответствуют атрибутам элемента. Если задан параметр ELEMENTS, то столбцы таблицы соответствуютпод элементам, а не атрибутам. По умолчанию в режиме AUTO столбцы соответствуют атрибутам XML.

Имя таблицы (или псевдоним, если есть) соответствует имени элемента XML. Имя столбца (или псевдоним, если есть) соответствует имени атрибута или несоставному имени под элемента, если в запросе задан параметр ELEMENTS.

В основе иерархии (вложенности элементов) результирующего набора лежит порядок таблиц, который определяется столбцами из списка конструкции SELECT, поэтому порядок задания имен столбцов в конструкции SELECT имеет большое значение.

Порядок идентификации и вложенности таблиц определяется последовательностью имен столбцов в списке SELECT. Первая (крайняя слева) таблица формирует элемент высшего уровня результирующего документа XML. Вторая слева таблица, которая определяется столбцами из оператора SELECT, формирует под элементы элемента высшего уровня и т, д.

Если столбец из списка конструкции SELECT находится в таблице, которая уже указывалась в конструкции SELECT (тогда указывался другой ее столбец), то этот столбец добавляется как атрибут (или как под элемент, если задан параметр ELEMENTS) уже созданного элемента, а не открывает новую иерархию (путем добавления нового под элемента для этой таблицы).

Режим EXPUCIT

В режиме EXPLICIT форма документ, XML, который возвращается в результате исполнения запроса, определяется при создании запроса. Запрос составляют так, чтобы дополнительная информация о возможных вложенных элементах задавалась явно как часть запроса. Также разрешается указывать дополнительные характеристики на уровне столбца с помощью соответствующих директив. Если установлен режим EXPLICIT, то ответственность за формат XML-документа (в случае использования схемы XML-DATA) возлагается на пользователя.

XMLDATA

Ключевое слово XMLDATA указывает, что необходимо получить схему XML-Data. Она добавляется в документ как встроенная схема. Основное назначение ключевого XMLDATA, заданного в запросе, — получение сведений о типах данных XML, которые можно использовать там, где эти сведения необходимы (например, при обработке числовых выражений). В противном случае все содержимое документа XML считается текстовой строкой.

ELEMENTS

Если задан параметр ELEMENTS, то столбцы возвращаются в виде под элементов. В противном случае они соответствуют атрибутам XML. Этот параметр поддерживается только в режиме AUTO.

BINARY BASE64

Если задан параметр BINARY Base64, то все двоичные данные, которые возвращает запрос, представлены в формате base64. Чтобы получать двоичные данные в режимах RAW и EXPLICIT, необходимо задать этот параметр. В режиме AUTO двоичные данные по умолчанию возвращаются в виде ссылки.

56. Запишите запрос Select, содержащий метод query.

query('XQuery') - определяет запрос XQuery для экземпляра типа данных xml. Результат имеет тип данных xml. Метод возвращает экземпляр нетипизированного XML.

XQuery это строка, выражение XQuery, выполняющее в экземпляре XML запросы к узлам — элементам и атрибутам.

 

В следующем примере объявляется переменная @myDoc типа данных xml, и этой переменной присваивается экземпляр XML. Далее методом query() для документа определяется запрос XQuery.

Запрос извлекает дочерний элемент <Features> элемента <ProductDescription>:

 

declare @myDoc xml

set @myDoc = '<Root>

<ProductDescriptionProductID="1" ProductName="Road Bike">

<Features>

<Warranty>1 year parts and labor</Warranty>

<Maintenance>3 year parts and labor extended maintenance is available</Maintenance>

</Features>

</ProductDescription>

</Root>'

SELECT @myDoc.query('/Root/ProductDescription/Features')

Результат:

<Features>

<Warranty>1 year parts and labor</Warranty>

<Maintenance>3 year parts and labor extended maintenance is available</Maintenance>

</Features>

Использование метода query() для столбца типа XML

В следующем примере метод query() используется для задания запроса XQuery к столбцу CatalogDescription типа данных xml в базе данных AdventureWorks:

SELECT CatalogDescription.query('declare namespace PD="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";<Product ProductModelID="{ /PD:ProductDescription[1]/@ProductModelID }" />') as ResultFROM Production.ProductModelwhereCatalogDescription.exist('declare namespace PD="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";declare namespace wm="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain"; /PD:ProductDescription/PD:Features/wm:Warranty ') = 1

В предыдущем запросе обратите внимание на следующее.

· Столбец CatalogDescription является типизированным столбцом xml. Это означает, что имеется связанная с ним коллекция схем.В прологе XQueryключевое слово namespace используется для определения префикса, который в дальнейшем используется в теле запроса.

· Метод query() строит XML, элемент <Product>, имеющий атрибут ProductModelID, и значение атрибута ProductModelID извлекается из базы данных.Дополнительные сведения о конструировании XML см. в разделе Построение XML (XQuery).

· Метод exist() (тип данных XML) в предложении WHERE используется для нахождения только тех строк, которые в XML содержат элемент <Warranty>.Ключевое слово namespace, опять же, используется для определения двух префиксов пространства имен.

Частичныйрезультат:

<Product ProductModelID="19"/><Product ProductModelID="23"/>...

 

57. Запишите запрос Select, содержащий методы nodes и value.

Метод nodes() незаменим в тех случаях, когда экземпляр типа данных xml необходимо разделить на набор реляционных данных. Он позволяет идентифицировать узлы, которые будут ставиться в соответствие новой строке.

 

Синтаксис: nodes (XQuery) as Table(Column)

Применение метода nodes() к переменной типа данных xml

В этом примере имеется XML-документ с элементом верхнего уровня <Root> и тремя дочерними элементами <row>. Запрос использует метод nodes() для разделения контекстных узлов, по одному для каждого элемента <row>. Метод nodes() возвращает набор из трех строк. Каждая строка имеет логическую копию исходного XML, с контекстными узлами, идентифицирующими разные элементы <row> исходного документа.

Запрос возвращает контекстный узел из каждой строки:

DECLARE @x xml SET @x='<Root><row id="1"><name>Larry</name><oflw>some text</oflw></row><row id="2"><name>moe</name></row><row id="3" /></Root>'SELECT T.c.query('.') AS resultFROM @x.nodes('/Root/row') T(c)GO

Ниже показан результат.В этом примере метод запроса возвращает элемент контекста и его содержимое:

<row id="1"><name>Larry</name><oflw>some text</oflw></row><row id="2"><name>moe</name></row><rowid="3"/>

Метод value() - выполняет запрос XQuery к структуре XML и возвращает значение типа SQL. Данный метод возвращает скалярное значение.

 

Синтаксис:value (XQuery, SQLType).

 

Использование метода value() над переменной типа xml

В следующем примере экземпляр XML хранится в переменной типа xml. Метод value() извлекает из переменной XML значение атрибута ProductID. Затем полученное значение присваивается переменной типа int.

DECLARE @myDoc xmlDECLARE @ProdIDintSET @myDoc = '<Root><ProductDescriptionProductID="1" ProductName="Road Bike"><Features><Warranty>1 year parts and labor</Warranty><Maintenance>3 year parts and labor extended maintenance is available</Maintenance></Features></ProductDescription></Root>' SET @ProdID= @myDoc.value('(/Root/ProductDescription/@ProductID)[1]', 'int')SELECT @ProdID

В результате возвращается значение 1.

 

58. Запишите запрос Update, содержащий метод modify.

Метод modify(XML_DML) - изменяет содержимое XML-документа. Данный метод служит для изменения содержимого переменной или столбца типа xml. Этот метод использует DML-инструкцию языка XML для вставки, обновления и удаления узлов из данных XML. Метод modify() типа данных xml может быть использован только в предложении SET инструкции UPDATE.

XML_DML - строка языка обработки данных для XML. Обновление XML-документа выполняется в соответствии с этим выражением.


 

59. Основные классы библиотеки System.Data.SqlClient

Класс Описание
SqlBulkCopy Позволяет эффективно выполнить массовую загрузку таблицы SQL Server с данными из другого источника.
SqlBulkCopyColumnMapping Определяет соответствие между столбцом в источнике данных экземпляра SqlBulkCopy и столбцом в таблице назначения данного экземпляра.
SqlBulkCopyColumnMappingCollection Коллекция объектов SqlBulkCopyColumnMapping, наследующих CollectionBase.
SqlClientFactory Представляет набор методов для создания экземпляров классов источников данных, реализованных поставщиком System.Data.SqlClient.
SqlClientMetaDataCollectionNames Предоставляет список констант для использования с методом GetSchema в целях извлечения коллекций метаданных.
SqlClientPermission Позволяет поставщику данных платформы.NET Framework для SQL Server убедиться, что пользователь обладает уровнем безопасности, достаточным для доступа к источнику данных.
SqlClientPermissionAttribute Связывает операцию безопасности с пользовательским атрибутом безопасности.
SqlCommand Представляет инструкцию Transact-SQL или хранимую процедуру, выполняемую над базой данных SQL Server. Этот класс не наследуется.
SqlCommandBuilder Автоматически генерирует однотабличные команды, которые позволяют согласовать изменения, вносимые в объект DataSet, со связанной базой данных SQL Server. Этот класс не наследуется.
SqlConnection Предоставляет открытое подключение к базе данных SQL Server. Этот класс не наследуется.
SqlConnectionStringBuilder Обеспечивает удобный способ создания и управления содержимым строк подключения с помощью класса SqlConnection.
SqlCredential SqlCredential обеспечивает более безопасный способ задать пароль для попытки входа с использованием аутентификации SQL Server. SqlCredential состоит из идентификатора пользователя и пароля, используемых для аутентификации SQL Server. Пароль в объекте SqlCredential имеет типSecureString. SqlCredential не может быть унаследован. Аутентификация Windows (IntegratedSecurity = true) остается самым безопасным способом доступа к базе данных SQL Server.
SqlDataAdapter Представляет набор выполняемых над данными команд и подключения базы данных, которые используется для заполнения DataSet и обновления базы данных SQL Server. Этот класс не наследуется.
SqlDataReader Предоставляет возможность чтения потока строк только в прямом направлении из базы данных SQL Server. Этот класс не наследуется.
SQLDebugging Инфраструктура. Включено для поддержки отладки приложений.Не предназначено для непосредственного использования.
SqlDependency Объект SqlDependency представляет зависимость уведомления о запросе между приложением и экземпляром SQL Server. Приложение может создавать объект SqlDependency и регистрироваться для получения уведомлений через обработчик событий OnChangeEventHandler.
SqlError Собирает сведения, относящиеся к предупреждениям или ошибкам, возвращаемым SQL Server.
SqlErrorCollection Собирает все ошибки, созданные поставщиком данных платформы.NET Framework для SQL Server.Этот класс не наследуется.
SqlException Исключение, которое выбрасывается при возврате SQL Server предупреждения или ошибки. Этот класс не наследуется.
SqlInfoMessageEventArgs Предоставляет данные для события InfoMessage.
SqlNotificationEventArgs Представляет набор аргументов, передаваемых обработчику событий уведомления.
SqlParameter Предоставляет параметр для объекта SqlCommand и, при необходимости, его отображение наDataSet. Этот класс не наследуется. Дополнительные сведения о параметрах см. в разделе ConfiguringParametersandParameterDataTypes (ADO.NET).
SqlParameterCollection Представляет коллекцию параметров, связанных с SqlCommand, а также их соответствующие сопоставления со столбцами в DataSet. Этот класс не наследуется.
SqlProviderServices Реализация DbProviderServices для поставщика SqlClient для SQL Server.
SqlRowsCopiedEventArgs Представляет набор аргументов, передаваемых SqlRowsCopiedEventHandler.
SqlRowUpdatedEventArgs Предоставляет данные для события RowUpdated.
SqlRowUpdatingEventArgs Предоставляет данные для события RowUpdating.
SqlTransaction Предоставляет транзакцию Transact-SQL, которая должна быть выполнена над базой данных SQL Server. Этот класс не наследуется.

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2017-11-19 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: