Рассылка закрыта
При закрытии подписчики были переданы в рассылку "Вопросы и ответы по MS SQL Server" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
← Декабрь 2004 → | ||||||
1
|
2
|
3
|
4
|
5
|
||
---|---|---|---|---|---|---|
7
|
8
|
9
|
10
|
11
|
12
|
|
14
|
15
|
16
|
17
|
18
|
19
|
|
20
|
22
|
23
|
24
|
25
|
26
|
|
27
|
28
|
29
|
31
|
Статистика
-20 за неделю
MS SQL Server - дело тонкое...
Информационный Канал Subscribe.Ru |
#227<< #228 |
СОДЕРЖАНИЕ SQL Server 2005: Data Mining & Репликация транзакций
Дата: 27.12.2004г. 18:30 1. Data Mining. Обзор новых возможностей. Заур Нуралиев 2. Репликация транзакций. SQL Server 2000/2005. Сердюк Владимир
Для регистрации на семинар, необходимо заполнить РЕГИСТРАЦИОННУЮ ФОРМУ,
с указанием Вашей фамилии, имени, отчества и адреса электронной почты. Количество мест в аудитории семинара ограничено, поэтому прошу Вас не откладывать регистрацию. За день до даты проведения семинара, всем кто был успешно зарегистрирован, по электронной почте придёт письмо с подтверждением регистрации. Для того, что бы пройти в помещение проведения семинара, при себе необходимо иметь паспорт или другое удостоверение личности. Карта проезда в представительство Microsoft
Поддержка XML в Microsoft SQL Server 2005 (продолжение)
По материалам статьи
XML Support in Microsoft SQL Server 2005
Shankar Pal, Mark Fussell, and Irwin Dolobowsky Компиляция и выполнение запроса Команда SQL обрабатывается анализатором SQL. Когда он обнаруживает выражение XQuery, управление передается компилятору XQuery, который затем компилирует выражение XQuery. Это порождает дерево запросов. Общее дерево запросов выполняет оптимизацию запросов и строит физический план запросов, основанный на оценке затрат. Просмотр плана показывает большинство реляционных операторов и несколько новых операторов, таких, как UDX для обработки XML. Выполнение запросов ориентировано на строки, как и в реляционной модели. Выражение WHERE применяется к каждой строке таблицы docs; это включает анализ XML данных во время выполнения, чтобы применять методы типа XML. Если условие выполняется, то строка блокируется и выражение SELECT применяется к строке. Результат выводится в виде данных XML для метода query() и конвертируется в соответствующий тип для метода value(). Если, напротив, строка не удовлетворяет условию выражения WHERE, то она пропускается и выполнение переходит на следующую строку. Изменение данных XML SQL Server 2005 имеет конструкции для изменения данных в виде расширения XQuery. Поддеревья могут вставляться перед или после определенного узла, или как самые левые или самые правые потомки. Более того, поддерево может быть вставлено в родительский узел, в этом случае оно становится самым правым потомком родителя. Поддерживаются вставки атрибутов, элементов и текстовых узлов. Также поддерживается удаление поддеревьев. В этом случае целые поддеревья удаляются из экземпляра XML. Скалярные значения могут заменяться новыми скалярными значениями. Пример: вставка поддеревьев в экземпляры XML Этот пример показывает использование метода modify() для вставки нового элемента <section> справа от элемента <section>, чей номер равен 1. UPDATE docs SET xCol.modify(' insert <section num="2"> <heading>Background</heading> </section> after (/doc/section[@num=1])[1]') Пример: обновление цены книги на значение $49.99 Следующая команда обновления заменяет цену книги <price> с ISBN 1-8610-0311-0 на новое значение $49.99. Экземпляр XML типизирован схемой XML http://myBooks, поэтому в команде изменения данных XML объявляется пространство имен. UPDATE XmlCatalog SET Document.modify (' default namespace = "http://myBooks" replace value of (/bookstore/book[@ISBN= "1-8610-0311-0"]/price)[1] with 49.99') Проверка типа и статические ошибки XQuery выполняет проверку типа. В фазе компиляции проверяется правильность статического типа выражений XQuery и команд изменения данных и используются схемы XML для ссылок на тип в случае типизированного XML. В случае нарушения типа во время выполнения генерируются ошибки статического типа. Примерами статических ошибок являются: добавление строки к числу, получение последовательности значений, если ожидается единственное значение, запрос к несуществующему узлу для типизированных данных. Явное преобразование типа используется, чтобы избежать статических ошибок несовпадения типа. Ошибки времени выполнения XQuery конвертируются в пустые последовательности. Параметры функций и операторы (например, eq), требующие единственного значения, возвращают ошибку, если компилятор не может определить, гарантировано ли единственное значение во время выполнения. Часто появляется проблема с нетипизированными данными. Например, поиск атрибута требует единственного родительского элемента. Пример: проверки типа в методе value() Следующий запрос по столбцу с нетипизированным XML требует спецификации //author/last-name, т.к. метод value() ожидает единственный узел в качестве первого аргумента. Без него компилятор не сможет определить, один ли узел <last-name> будет найден во время выполнения: SELECT xCol.value('(//author/last-name)[1]', 'nvarchar(50)') LastName FROM docs Применение комбинации node()-value() для получения значений атрибутов может не требовать спецификации, как показано в следующем примере: Пример: известное единственное значение Показанный ниже метод nodes() генерирует отдельную строку для каждого элемента <book>. Метод value(), применяемый на узле <book>, получает значение genre, которое, будучи атрибутом, является единственным. SELECT nref.value('@genre', 'varchar(max)') LastName FROM docs CROSS APPLY xCol.nodes('//book') AS R(nref) Междоменные запросы Когда Ваши данные располагаются в комбинации реляционных столбцов и столбцов XML, Вы можете захотеть написать запросы, которые сочетают обработку реляционных и XML данных. Вы можете конвертировать данные в реляционных столбцах и столбцах XML в экземпляр XML, используя FOR XML с директивой TYPE и выполнить запрос, используя XQuery. И наоборот, Вы можете генерировать набор строк из значений XML и выполнить запрос, используя T-SQL, как показано в главе "Генерация набора строк из данных XML" ниже. Более удобным и эффективным путем написания междоменных запросов является использование значения переменной SQL или столбца внутри выражения XQuery или внутри выражения изменения данных XML: * Вставьте значение переменной SQL в Ваше выражение XQuery или выражение XML DML, используя sql:variable(). * Используйте значения из реляционного столбца в XQuery или контексте XML DML с помощью sql:column(). Этот подход позволяет приложениям параметризовать запросы, как показано в следующем примере. Sql:column() используется таким же образом и обеспечивает дополнительные преимущества. Для повышения эффективности могут быть задействованы индексы столбца, если это будет выбрано оптимизатором запросов. Кроме того, можно использовать вычислимые столбцы. Тип XML и пользовательские типы не разрешены для использования с sql:variable() и sql:column(). Пример: междоменный запрос с использованием sql:variable() В этом запросе передается ISBN элемента <book> при помощи переменной SQL @isbn. Вместо константы, переменная sql:variable() содержит значение ISBN, и запрос может использоваться для поиска любого ISBN, а не только того, чье значение равно 0-7356-1588-2. DECLARE @isbn varchar(20) SET @isbn = '0-7356-1588-2' SELECT xCol FROM docs WHERE xCol.exist ('/book[@ISBN = sql:variable("@isbn")]') = 1 Генерация набора строк из данных XML При управлении пользовательскими свойствами и в сценариях обмена данными приложения довольно часто конвертируют часть данных XML в наборы строк. Например, чтобы передать таблицу входных параметров в хранимую процедуру или функцию, приложение конвертирует данные в XML и передает их в виде параметра XML. Внутри хранимой процедуры или функции набор данных опять генерируется из параметра XML. Для этой цели в SQL Server 2000 есть OpenXml(). Это средство для создания набора строк из экземпляра XML через определение реляционной схемы для набора строк и способа конвертации значений экземпляра XML в столбцы набора строк. И наоборот, метод nodes() может быть использован для генерации контекста узла внутри экземпляра XML; и контекст узла может использоваться в методах value(), query(), exist() и nodes() для создания желаемого набора строк. Метод nodes() получает выражение XQuery, применяет его к каждому экземпляру XML в столбце XML, и эффективно использует индексы XML. Следующий пример показывает использование метода nodes() для создания набора строк. Пример: получение свойств из экземпляра XML Предположим, Вам нужно получить имена и фамилии авторов, чье имя не "David", в наборе строк с двумя столбцами, FirstName и LastName. Вы можете сделать это, используя методы nodes() и value(): SELECT nref.value('first-name[1]', 'nvarchar(50)') FirstName, nref.value('last-name[1]', 'nvarchar(50)') LastName FROM docs CROSS APPLY xCol.nodes('//author') AS R(nref) WHERE nref.exist('.[first-name != "David"]') = 1 В этом примере nodes('//author') порождает набор ссылок на элементы <author> для каждого экземпляра XML. Имена и фамилии авторов получаются с помощью методов value(), относящихся к этим ссылкам. Для хорошей производительности столбец XML должен быть проиндексирован, что и является темой следующей главы. Индексирование данных XML Данные XML хранятся во внутренней двоичной форме, и могут достигать объема в 2 гигабайта. Каждый запрос анализирует данные XML в каждой строке таблицы один или несколько раз во время работы. Это приводит к замедлению обработки запроса. Если запрос часто повторяется, то лучше проиндексировать столбец XML, хотя и нужно принять во внимание возрастающие при этом затраты на изменение данных. Индексы XML создаются при помощи новой команды DDL на типизированных и нетипизированных столбцах XML. Индекс создает сбалансированное дерево по всем экземплярам XML в столбце. Первым создаваемым индексом на столбце XML является "первичный ключ XML". С его помощью поддерживаются три типа вторичных индексов XML на столбце XML для ускорения часто используемых классов запросов, как показано в следующей главе. Первичный индекс XML Первичный индекс XML требует наличия кластерного индекса на первичном ключе базовой таблицы (т.е. таблицы, в которой создан столбец XML). Первичный индекс XML создает сбалансированное дерево на поднаборе элементов Infoset узлов XML. Столбцы сбалансированного дерева представляют тэги, такие, как названия элементов и атрибутов, значения и типы узлов. Другие столбцы указывают порядок и структуру документов в данных XML и путь из корня экземпляра XML до каждого узла для эффективной оценки выражений пути. Первичный ключ базовой таблицы дублирован в первичном индексе XML для соответствия строк индекса со строками базовой таблицы. Тэги и названия типов из схем XML конвертируются в значения типа integer, и конвертированные значения хранятся в сбалансированном дереве для оптимизации хранения. Столбец пути в индексе хранит последовательность конвертированных значений в обратном порядке, т.е. от узла до корня экземпляра XML. Обратное представление позволяет сравнивать значения пути, если известен суффикс пути (в выражении пути, таком, как //author/last-name). Если основная таблица секционирована, то первичный индекс XML секционируется таким же образом, т.е. с использованием той же функции и схемы секционирования. Полные экземпляры XML получаются из столбцов XML (SELECT * FROM docs или SELECT xCol FROM docs). Запросы, включающие методы XML, используют первичный индекс XML и возвращают скалярные значения или поддеревья XML из самого индекса. Пример: создание первичного индекса XML Следующая команда создает индекс XML idx_xCol на столбце XML xCol таблицы docs: CREATE PRIMARY XML INDEX idx_xCol on docs (xCol) ПРОДОЛЖЕНИЕ СЛЕДУЕТ Статьи на русском языке
Создание OLAP-отчетов с помощью Crystal Reports 9: OLAP и аналитика
Four of a Kind - Backup Software Shootout Part 2 Самые популярные темы недели
Восстановление данных
Как отследить что пользователь открыл большую транзакцию? MS SQL Server 2000: управление и программирование
|
#227<< #228 |
Вопросы, предложения, коментарии, замечания, критику и т.п. оставляйте Виталию Степаненко и Александру Гладченко в форуме: Обсуждение рассылки
|
http://subscribe.ru/
http://subscribe.ru/feedback/ |
Подписан адрес: Код этой рассылки: comp.soft.winsoft.sqlhelpyouself |
Отписаться |
В избранное | ||