Обзор SQL Server 2005 для разработчика баз данных
По материалам статьи Matt Nunn, Microsoft Corporation: An Overview of SQL Server 2005 for the Database Developer
Перевод Виталия Степаненко
Оригинал статьи sql.ru
С выходом Microsoft SQL Server 2005 Beta 2 в мире разработки баз данных начинаются изменения. Если Вы разработчик баз данных, то теперь Вы можете создавать код в соответствии с его функциональностью, иметь доступ к данным во встроенных форматах, таких, как XML, и создавать сложные системы, управляемые сервером баз данных. Разработка баз данных становится более интегрированной, чем это было раньше, и все необходимые инструменты находятся прямо у Вас под рукой.
Эта статья обсуждает некоторые новые возможности SQL Server 2005, которые позволят Вам создавать приложения базы данных другого уровня.
Интеграция с .NET Framework
С выходом Microsoft SQL Server 2005 Beta 2 программисты баз данных могут использовать все преимущества библиотеки классов Microsoft .NET Framework и современных языков программирования для внедрения новой функциональности на сервере. Используя интеграцию с common language runtime (CLR), Вы можете создавать Ваши хранимые процедуры, функции и триггеры на языке .NET Framework, если захотите. Языки программирования Microsoft Visual Basic .NET и C# дают возможность работать с объектно-ориентированными конструкциями, структурированным управлением исключениями, массивами, пространствами имен и классами. Кроме того, .NET Framework предоставляет тысячи классов и методов, имеющих большие встроенные возможности, которые Вы легко можете использовать на стороне сервера. Многие задачи, которые было тяжело выполнить в Transact-SQL, могут выполняться гораздо легче с использованием управляемого кода; кроме того, теперь доступны два новых типа объектов базы данных - агрегаты и пользовательские типы. Теперь Вы сможете лучше использовать знания и навыки, которые Вы приобрели во время написания встроенного кода. Одним словом, SQL Server 2005 Beta 2 позволяет вам расширять возможности сервера базы данных для более простого выполнения вычислений и операций.
Интеграция между SQL Server и CLR дает несколько преимуществ:
- Улучшенная модель программирования: языки программирования, совместимые с .NET Framework, во многих отношениях намного богаче, чем Transact-SQL. Они предоставляют конструкции и возможности, которые ранее не были доступны разработчикам SQL.
- Улучшенная надежность и безопасность: управляемый код работает в среде CLR, в которой находится и движок баз данных. Это дает возможность объектам баз данных .NET Framework быть более безопасными и защищенными по сравнению с расширенными хранимыми процедурами, доступными в более ранних версиях SQL Server.
- Пользовательские типы и агрегаты: два новых объекта базы данных, которые расширяют возможности хранения данных и выполнения запросов в SQL Server, доступны с помощью CLR.
- Общая среда разработки: разработка баз данных встроена в среду разработки Microsoft Visual Studio 2005. Вы можете использовать те же инструменты для разработки и отладки объектов базы данных и скриптов, которые Вы используете для написания компонентов и служб .NET Framework среднего или клиентского уровня.
- Производительность и расширяемость: т.к. управляемый код компилируется в исполнимый код до выполнения, Вы можете получить значительное увеличение производительности в некоторых случаях. Вы также выиграете от интеграции с CLR, начав писать код с более сложной логикой, который больше подходит для расчетных задач, используя такие языки, как Visual Basic .NET и C#. Кроме того, Visual Basic .NET и C# предлагают объектно-ориентированные возможности, такие, как инкапсуляция, наследование и полиморфизм. Вы легко сможете организовать реляционный код в классы и пространства имен, что облегчит Вам организацию и поддержку кода при работе с большим количеством кода. Эта возможность логически и физически организовать код в сборки и пространства имен является большим преимуществом и позволяет Вам лучше находить и размещать различные части кода в большой базе данных.
Управляемый код является более эффективным, чем Transact-SQL, при обработке чисел и управлении сложной логикой выполнения и обеспечивает широкую поддержку обработки строк, регулярных выражений, и т.д. Также, с функциональностью библиотеки классов .NET Framework, Вы имеете полный доступ к тысячам готовых классов и процедур, которые Вы можете легко вызвать из любой хранимой процедуры, триггера или пользовательской функции. Все, от улучшенных функций обработки строк, математических функций, операций с датами до доступа к системным ресурсам, улучшенных алгоритмов шифровки, доступа к файлам, обработки изображений и манипуляции данными XML, легко доступно из управляемых хранимых процедур, функций, триггеров и агрегатов.
Одним из главных преимуществ управляемого кода является безопасность. Перед выполнением управляемого кода, CLR выполняет несколько проверок, используя процесс "verification", чтобы удостовериться, что код безопасен для запуска. Например, код проверяется, чтобы убедиться, что не производится чтения памяти, в которую не производилась запись.
Выбор между Transact-SQL и управляемым кодом
Когда Вы будете писать хранимые процедуры, триггеры и пользовательские функции, Вам придется принимать решение - делать это, используя традиционный Transact-SQL, или используя совместимый с .NET Framework язык программирования, такой, как Visual Basic .NET или C#. Ответ на этот вопрос зависит от ситуации, в некоторых случаях Вы захотите использовать Transact-SQL, а в других - управляемый код.
Transact-SQL лучше подходит для ситуаций, когда код выполняет доступ к данным с небольшим объемом или вообще без процедурной логики. Языки программирования, совместимые с .NET Framework, больше подходят для расчетных функций и процедур со сложной логикой, или для ситуаций, когда Вам нужно использовать преимущества библиотеки классов .NET Framework.
Размещение кода также важно. И Transact-SQL, и управляемый код работают на сервере. В результате функциональность и данные располагаются рядом, что позволяет Вам в полной мере воспользоваться вычислительной мощностью сервера. Это очень полезно, т.к. уменьшает трафик между данными и средним слоем. Просто выполненяя вычисления, находясь рядом с данными, система с интенсивным вводом-выводом может получить большой выигрыш в производительности. Функции CLR также могут использовать возможности процессора запросов SQL Server, который может распараллеливать и оптимизировать выполнение. С другой стороны, Вы можете захотеть, чтобы задачи, интенсивно использующие процессор, не располагались на Вашем сервере базы данных. Сегодня большинство клиентских компьютеров очень мощные, и Вы можете воспользоваться этой вычислительной мощью, поместив как можно большее количество кода на клиентские компьютеры. Здесь нет однозначного ответа, что лучше.
Сетевые службы (Web Services)
В SQL Server 2005 Вы можете разрабатывать сетевые службы XML на уровне базы данных, заставляя SQL Server использовать HTTP. Это дает новые возможности доступа к данным для приложений, которые сосредоточены вокруг сетевых служб. В SQL Server 2005 Beta 2 Вы можете использовать HTTP для прямого доступа к SQL Server без использования среднего слоя, например, без Microsoft Internet Information Services (IIS). SQL Server предоставляет интерфейс сетевой службы, позволяя выполнение команд SQL и вызов функций и процедур. Результаты запросов возвращаются в формате XML и могут использовать инфраструктуру сетевых служб Visual Studio.
ADO.NET
В новой версии ADO.NET много нововведений. От новой поддержки уведомлений об изменении запросов до множественных активных наборов результатов (multiple active result sets, MARS), ADO.NET расширяет доступ и манипуляцию наборами данных для достижения еще большей масштабируемости и гибкости.
Поддержка уведомлений ADO.NET
В SQL Server 2005 Beta 2 появилась поддержка уведомлений для запросов SQL Server. Вы можете использовать эту поддержку для отправки команды в SQL Server с указанием, что должно быть сгенерировано уведомление, если повторное выполнение этой команды вернет результаты, отличные от полученных в первый раз. Это выполняется с использованием зависимого объекта, который определяет, когда изменились данные. Команды, отправляемые на сервер через любой клиентский API, такой, как ADO.NET, OLE DB, Open Database Connectivity (ODBC), Microsoft ActiveX Data Objects (ADO), или SOAP, могут включать тэг, требующий уведомления. Для каждой команды, выполняемой с указанием генерации уведомлений, сервер создает "подписку уведомлений", которая срабатывает один раз для каждой команды, включенной в запрос на генерацию уведомлений. Уведомления доставляются через очередь SQL Service Broker, из которой их получают приложения, и используют службы активации и команды блокировки, которые возвращают информацию, доступны ли уведомления. Уведомления запросов полезны для кэширования результатов в приложениях, таких, как Web-сайты, которые управляются данными из базы данных.
Множественные активные наборы результатов
Множественные активные наборы результатов (Multiple active result sets, MARS) дают возможность иметь более одного выполняющегося запроса на соединение и более одного набора результатов по умолчанию на соединение. Наборы результатов по умолчанию имеют свойства forward-only и read-only. Для наборов результатов по умолчанию клиентские драйверы получают информацию большими блоками (блоки размера буфера из потока данных), так что запросы приложения выполняются без повторного обращения к серверу (как в случае серверных курсоров). Приложение может использовать простую программную модель "одна строка за один раз" без ухудшения производительности.
Возможности множественных активных наборов результатов позволяют избавиться от текущего ограничения, когда открытый по умолчанию набор результатов не дает возможности драйверу посылать запросы на сервер, пока не будет получен весь набор результатов.
Поддержка снапшотной изоляции
SQL Server 2005 Beta 2 представляет новый уровень изоляции - снапшотную изоляцию. Снапшотная изоляция - это механизм управления версиями строк, в котором версии данных хранятся для чтения. Этот новый уровень изоляции обеспечивает следующий преимущества:
Большая доступность данных для приложений, которые только читают данные. Неблокирующие операции чтения разрешены в среде OLTP.
Автоматическое определение конфликтов прав для транзакций записи.
Упрощенная миграция приложений из Oracle в SQL Server.
Например, блокировка может привести к возникновению блокировок между приложениями, которые одновременно читают и записывают одни и те же данные. Если транзакция изменяет строку, то другая транзакция уже не может прочитать эту строку, пока не завершится транзакция записи. При снапшотной изоляции транзакция может получить доступ к предыдущему значению строки.
Уровень снапшотной изоляции поддерживается ADO, OLE DB, SQLOLEDB, Shape Provider, SQLODBC, OLE DB Managed Provider и SQL Managed Provider.
Объекты управления SQL
Объекты управления SQL (SQL Management Objects, SMO) - это объектная модель управления для SQL Server 2005. SMO отражает значительные улучшения в дизайне и архитектуре объектной модели управления SQL. Ее просто использовать, но она является сложной объектной моделью, основанной на управляемом коде .NET Framework. SMO - это главный инструмент для разработки приложений управления базами данных с использованием .NET Framework. SMO используется каждым диалоговым окном в SQL Server Management Studio, и любое действие по администрированию, которое Вы можете выполнить в SQL Server Management Studio, Вы также можете выполнить с помощью SMO.
Новая объектная модель SMO и Microsoft Windows Management Instrumentation (WMI) API заменяют SQL-DMO. Где это возможно, SMO включает в себя для простоты использования такие же объекты, как и в SQL-DMO. Вы еще можете использовать SQL Server 2005 Beta 2 с SQL-DMO, но SQL-DMO не будет обновляться для управления специфическими особенностями SQL Server 2005.
SMO и SQL-DMO
Объектная модель SMO - это логическое продолжение проделанной в SQL-DMO работы. Модель SMO совместима с SQL-DMO и содержит множество тех же объектов. Где это возможно, сохраняется исходный дизайн SQL-DMO, но SMO имеет несколько дополнительных возможностей помимо возможностей SQL-DMO. Для максимального покрытия языка определения данных (data definition language, DDL) и административных возможностей SQL Server 2005 в SMO добавлено более 150 новых классов.
Основными преимуществами модели SMO являются ее производительность и масштабируемость. SMO имеет кэшированную объектную модель, которая позволяет Вам изменять несколько свойств объекта перед сохранением изменений в SQL Server. В результате SMO производит меньше обращений к серверу и делает свои объекты более гибкими. SMO также имеет оптимизированную загрузку объектов. Это означает, что Вы можете загружать объекты частично или полностью. Вы можете быстро загружать множество объектов, не загружая все их свойства.
В отличие от SQL-DMO, который имеет единственную корневую папку приложения, в которой содержатся ссылки на все созданные объекты на сервере, SMO позволяет Вам создать множество корневых папок для серверов без установки нового соединения. SMO выполняет расширенное многофазное скриптование в дополнение к стилевому скриптованию в SQL-DMO. Вы также можете переключать объект в режим захвата и захватывать любой DDL, который будет сгенерирован для этого объекта без внесения изменений на сервере.
SQL-DMO также имеет управляемый объект, который упрощает интерфейс с WMI для поддержки мониторинга WMI и конфигурирования сервера через интерфейс объекта SMO.
Технологии XML
XML стал обычным форматом для хранения и передачи размеченной, структурированной или полуструктурированной информации. Примерами таких данных являются текст (размеченный для определения структуры документа и подчеркивания его отдельных частей), иерархические (структурированные) объекты и данные разной природы, которые могут менять свою структуру от одного элемента к другому (полуструктурированные). XML также является важным и широко распространенным стандартом для обмена данными между разными приложениями по локальным сетям и Internet.
Microsoft SQL Server 2000 поддерживает использование XML через Microsoft SQLXML, что позволяет Вам конвертировать реляционные данные в формат XML и хранить данные XML в реляционных таблицах. Microsoft SQL Server 2005 Beta 2 расширяет эту функциональность, включив XML в типы данных, а также предоставив новый язык запросов для документов XML, позволяя Вам выполнять модификации над этими документами.
Для лучшей поддержки нужд пользователей, работающих с данными XML, был введен новый тип данных - XML. В этом типе есть методы - query(), exist(), value(), nodes() и modify() - которые являются важным подмножеством спецификации XML Query (XQuery) последней редакции. Фактически эта спецификация была расширена в SQL Server 2005 Beta 2 путем добавления конструкций модификации данных XML. Для поддержки типа данных XML были добавлены ключевые слова для регистрации и управления схемами XML. Также были сделаны изменения в FOR XML и OPENXML, которые были добавлены в SQL Server 2000 для генерации XML из реляционных данных, и наоборот. Теперь они расширены поддержкой типа данных XML.
Тип данных XML
XML может моделировать сложные данные вместо того, чтобы ограничиваться скалярными значениями, которые поддерживает SQL Server. Поэтому встроенные строковые типы данных, такие, как char или varchar, не подходят для полного и эффективного использования функциональности и многих преимуществ XML. Например, если XML хранится в строке, Вы можете вставлять или выбирать целый документ, или даже получать из него некоторые части, но Вы не можете делать запросы по содержимому самого документа. Обеспечивая поддержку XML, SQL Server 2005 позволяет Вам делать запросы к части документа XML, проверять, что документ соответствует схеме XML, и даже изменять содержимое документа XML прямо в столбце. Это также позволяет объединить традиционные, реляционные данные с данными в неструктурированных или полуструктурированных документах XML, что невозможно в SQL Server 2000. В SQL Server 2005 данные XML хранятся в виде больших двоичных объектов (binary large objects, BLOBs) во внутреннем представлении, что позволяет проводить эффективный анализ содержимого и выполнять некоторое сжатие данных.
Коллекция схем XML может быть ассоциирована со столбцом типа XML. Это обеспечивает проверку для ограничений, вставки и обновлений, и типизацию значений в хранимых данных XML, как и оптимизацию хранения данных и обработки запросов. SQL Server 2005 также предоставляет несколько команд DDL для управления схемами на сервере.
Получение и запись XML
SQL Server 2005 Beta 2 также включает некоторое расширение функциональности FOR XML и OPENXML, которые впервые появились в SQL Server 2000.
FOR XML
Команда FOR XML в SQL Server 2000 не дает возможности сохранить результаты XML на сервере. Вы не можете сохранить результаты XML в таблице (без возвращения их к клиенту, конечно) или переменной. SQL Server 2005 Beta 2 расширяет FOR XML, добавив в него поддержку типа данных XML и дав возможность сохранять XML на сервере. Это делается путем добавления директивы TYPE в FOR XML. Например, результаты команды SELECT...FOR XML TYPE создают экземпляр данных XML, который может быть сохранен в локальной переменной XML или использован в последующей команде INSERT для заполнения столбца XML. Опция PATH определяет путь в дереве XML, где должно появиться значение столбца. Опции TYPE и PATH, включенные в FOR XML, упрощают создание сложного XML и более удобны в использовании, чем запросы FOR XML EXPLICIT. FOR XML также работает со столбцами XML в SQL Server 2005 Beta 2.
OPENXML
SQL Server 2000 в основном рассматривал выражение FOR XML и функцию набора строк OPENXML в качестве противоположностей. Действительно, с помощью FOR XML Вы можете получать реляционные данные в виде XML; с помощью OPENXML Вы можете превращать XML в реляционные данные, для которых Вы можете создавать join или выполнять запросы. SQL Server 2005 Beta 2 расширяет функциональность OPENXML. Кроме типа данных XML также теперь поддерживаются нескольких новых типов данных, как, например, пользовательские типы (user-defined types, UDT). Вы можете использовать их в выражении OPENXML WITH, а также можете передавать экземпляр XML в sp_preparedocument.
Поддержка XQuery
Язык запросов XML, или XQuery, является развитым и гибким языком, который оптимизирован выполнять запросы над всеми типами данных XML. Используя XQuery, Вы можете выполнять запросы по переменным и столбцам XML, используя методы XML. XQuery развивает World Wide Web Consortium (W3C), как и многие стандарты XML. XQuery развился из языка запросов Quilt, который сам базировался на XML Path Language (XPath) версии 1.0, XQL и SQL. Он также содержит в себе XPath 2.0 как подмножество. Поэтому если Вы знаете XPath 1.0, то Вам не придется учить абсолютно новый язык запросов. Однако в XQuery существует множество возможностей, которых не было в XPath 1.0, таких, как типизирование, специальные функции, лучшая поддержка итерации, сортировки результатов и моделирования.
SQL Server 2005 Beta 2 поставляется с большими возможностями XQuery, что позволяет выполнять манипуляции с объектами XML на уровне данных. SQL Server поддерживает статически типизированное подмножество XQuery 1.0 Working Draft от 15 ноября 2003.
Расширения DML
Спецификация XQuery в настоящее время содержит синтаксис и семантику для выполнения запросов, но не модификации документов XML. Язык модификации данных XML (XML Data Modification Language, DML) является расширением возможностей XQuery по модификации данных. SQL Server 2005 Beta 2 добавляет три ключевых слова: insert, update и delete. Каждое из этих ключевых слов используется в методе modify() типа данных XML.
Новая среда разработки
SQL Server 2005 представляет новую среду приложений, Service Broker. Service Broker - это распределенная среда приложений, которая обеспечивает надежный асинхронный обмен сообщениями на уровне базы данных.
SQL Service Broker
За последние 10 лет увеличение числа приложений электронной коммерции создало потребность в улучшении управления потоками в приложениях баз данных. Когда клиент размещает заказ на книгу, то требуется выполнение транзакций в системах хранения, доставки и системе кредитных карт, а также отправка подтверждения о приеме заказа, используя другое Web-приложение. Ожидание выполнения каждого из этих процессов - не самая лучшая идея. SQL Server 2005 предоставляет новую масштабируемую архитектуру для асинхронного обмена сообщениями.
Технология Service Broker позволяет внутренним или внешним процессам отправлять и получать потоки надежных, асинхронных сообщений, используя расширения обычного языка управления данными Transact-SQL. Сообщения отправляются в очередь в ту же базу данных, где находится и отправитель, или в другую базу данных того же экземпляра SQL Server, или в другой экземпляр SQL Server на том же или на удаленном сервере.
Reporting Services
С выходом SQL Server 2005 Microsoft расширяет свой новый основной компонент интегрированной платформы бизнес-приложений (business intelligence, BI). SQL Server Reporting Services расширяет видение Microsoft бизнес-приложений, делая их более простыми для получения нужными людьми нужной информации в любой деловой среде.
Reporting Services - это цельная серверная платформа для создания, управления и доставки обычных и интерактивных отчетов. Она включает все, что необходимо для создания, распространения и управления отчетами. В то же время модульный дизайн и расширенные API Routing Services позволяют разработчикам программного обеспечения, поставщикам данных и предприятиям объединять систему отчетности с другими системами, в том числе сторонних производителей.
Reporting Services поставляется с SQL Server 2005 и включает:
Полный набор инструментов для создания, управления и просмотра отчетов.
Движок для хранения и выполнения отчетов.
Расширяемую архитектуру и открытые интерфейсы для встроенных отчетов или интеграции решений в различные среды информационных технологий.
Службы уведомлений (Notification Services)
Microsoft SQL Server Notification Services является платформой для разработки и развертывания приложений, которые создают и отправляют уведомления пользователям. Уведомления - это персонифицированные сообщения, которые могут быть отправлены множеству устройств.
Уведомления отражают предпочтения подписчика. Подписчик создает подписку, чтобы показать интерес к некоторой информации. Например, "уведомьте меня, когда цена акции Adventure Works достигнет $70.00" или "уведомьте меня, когда обновится документ по стратегии, который составляет моя команда".
Уведомление может быть создано и отправлено пользователю, когда выполняется событие триггера, или может быть создано и отправлено по заранее определенному расписанию, которое определил пользователь. Подписка пользователя определяет, когда должно быть создано и отправлено уведомление.
Уведомления могут быть отправлены многим устройствам. Например, уведомление может быть отправлено на мобильный телефон пользователя, на карманный компьютер, Microsoft Windows Messenger, или на e-mail. Так как эти устройства пользователь часто носит с собой, то уведомления отлично подходят для отправки высокоприоритетной информации.
SQL Server Mobile Edition
SQL Server 2000 поставляется с SQL Server 2000 Windows CE Edition, который сейчас называется SQL Server Mobile Edition версии 3.0. В SQL Server Mobile Edition есть несколько ключевых особенностей, которые имеют отношение к разработчикам:
Вы можете создать базу данных SQL Server Mobile Edition на компьютере или на устройстве напрямую из SQL Server Management Studio. Вы также можете управлять схемой базы данных SQL Server Mobile Edition напрямую из Management Studio, независимо от того, находится ли база данных на мобильном устройстве или на компьютере. Вы можете использовать SQL Server Management Studio для выполнения запросов, которые обращаются к базе данных SQL Server Mobile Edition, независимо от того, что она находится на мобильном устройстве или на компьютере. Вы также можете воспользоваться преимуществами новых особенностей SQL Server Mobile Edition, которые включают план исполнения XML, который выводится так же, как и план исполнения в SQL Server, а также возможностью использовать хинты запросов для настройки оптимизатора запросов в SQL Server Mobile Edition. Впервые Вы можете контролировать план оптимизации на мобильном устройстве.
Теперь Вы можете программировать объекты Data Transformation Services (DTS) для обмена данными.
Новый набор SqlCeResult наследуется из набора SQLResult, находящегося в SQL Server 2005. Это позволяет SQL Server Mobile Edition иметь настоящий обновляемый курсор. Также он позволяет подсоединяться к объектам данных, находящимся на мобильных устройствах.
Вы можете программировать приложения для синхронизации данных при открытом главном приложении, и у Вас есть возможность организовать одновременный доступ двух отдельных приложений к одной и той же базе данных на мобильном устройстве.
Вы можете получать уведомления, которые Вы можете вставлять в панели статуса для получения состояния синхронизации. Раньше нельзя было узнать о состоянии синхронизации и уведомить пользователя, что устройство не прекратило отвечать на запросы.
Вы можете поддерживать небольшой размер базы данных через гораздо более агрессивную политику работы со страницами.
Вы можете совместно использовать параметризированный код запроса с синтаксисом SQL Server.
Улучшения языка
Улучшения в Transact-SQL
Transact-SQL долго был основой для всего программирования в SQL Server. SQL Server 2005 Beta 2 предоставляет множество новых языковых возможностей для разработки масштабируемых приложений баз данных. Эти улучшения включают обработку ошибок, новые рекурсивные возможности запросов и поддержку новых возможностей SQL Server Database Engine. Улучшения Transact-SQL в SQL Server 2005 Beta 2 повышают эффективность написания запросов, позволяя Вам повысить производительность Вашего кода и расширить возможности по управлению ошибками. Большие усилия, которые были затрачены на улучшение Transact-SQL, показывают твердую веру в его важную роль в SQL Server.
Рекурсивные запросы и общие табличные выражения
Общее табличное выражение (common table expression, CTE) - это временный именованный набор результатов, на который могут ссылаться команды. В простой форме CTE может рассматриваться как улучшенная подзапроса. Вы ссылаетесь на CTE в выражении FROM запроса, так же, как и на подзапросы. Вы определяете CTE только один раз и можете ссылаться на него несколько раз в Вашем запросе. В определении CTE Вы можете ссылаться на переменные, которые определены в том же пакете. Вы даже можете использовать CTE в командах INSERT, UPDATE, DELETE и CREATE VIEW, так же, как Вы используете представления. Настоящая мощь CTE заключается в его рекурсивных возможностях, когда CTE может содержать ссылки на самого себя. Вы используете подзапросы, когда хотите сослаться на результат запроса как на таблицу и не хотите создавать постоянное представление в базе данных. Однако результаты подзапросов имеют ограничение, которое снимается CTE: Вы не можете определить полученную таблицу один раз и использовать ее несколько раз; вместо этого Вы должны создать несколько подзапросов в том же запросе. Также Вы можете определить CTE один раз и использовать его несколько раз в запросе без сохранения в базе данных.
Нерекурсивные CTE увеличивают возможности Ваших выражений. Однако для каждой части кода, в которой используются CTE, Вы можете писать более длинный код, который выдает такие же результаты, используя конструкции Transact-SQL, такие, как подзапросы. Это отличается от рекурсивных CTE. Когда CTE ссылается на себя, оно считается рекурсивным. Рекурсивные CTE создаются как минимум из двух частей запроса (или членов, как это называется для рекурсивных запросов). Первая часть - это нерекурсивный запрос, который также называется anchor member (AM). Другая часть - это рекурсивный запрос, который также называется recursive member (RM). Части запроса объединены оператором UNION ALL в одно CTE.
Операторы PIVOT и UNPIVOT
SQL Server 2005 Beta 2 представляет два новых реляционных оператора, PIVOT и UNPIVOT, которые Вы можете использовать в выражении FROM запроса. Эти операторы выполняют некоторые преобразования над входным табличным выражением и выдают таблицу в результате. Оператор PIVOT превращает строки в столбцы, выполняя при этом агрегацию при необходимости. Он расширяет входное табличное выражение, основываясь на заданном для преобразования столбце и создавая таблицу вывода со столбцом для каждого уникального значения в столбце для преобразования.
Оператор PIVOT полезен для обработки сценариев с открытой схемой и для создания матричных отчетов. В сценарии с открытой схемой Вы поддерживаете объекты с наборами свойств, которые либо неизвестны заранее, либо различны для каждого типа объектов. Пользователи Вашего приложения определяют свойства динамически. Вместо предопределения многих столбцов и хранения NULL в Ваших таблицах, Вы разносите свойства по строкам и храните только свойства, относящиеся к определенному экземпляру объекта. PIVOT позволяет Вам создавать матричные отчеты для открытой схемы и других сценариев, в которых Вы превращаете строки в столбцы, выполняя при этом агрегацию и представляя данные в нужной форме.
Оператор UNPIVOT выполняет операцию, противоположную PIVOT, превращая столбцы в строки. Он сужает входное табличное выражение, основываясь на заданном для преобразования столбце. Оператор UNPIVOT позволяет Вам нормализовать данные, которые были ранее денормализованы при помощи PIVOT.
Оператор APPLY
С использованием оператора APPLY SQL Server 2005 Beta 2 позволяет Вам ссылаться на табличную функцию в кореллированном подзапросе. Реляционный оператор APPLY позволяет Вам вызвать определенную табличную функцию один раз для каждой строки внешнего табличного выражения. Вы определяете APPLY в выражении FROM запроса, также, как Вы используете реляционный оператор JOIN. APPLY существует в двух формах - CROSS APPLY и OUTER APPLY.
CROSS APPLY вызывает табличную функцию для каждой строки внешнего табличного выражения. Вы можете ссылаться на столбцы внешней таблицы как на аргументы табличной функции. CROSS APPLY возвращает унифицированный набор результатов, собранный из всех результатов, возвращенных отдельными вызовами табличной функции. Если табличная функция возвращает пустой набор для данной внешней строки, строки, то эта строка не возвращается в результате.
OUTER APPLY очень похож на CROSS APPLY, но также он возвращает строки из внешней таблицы, даже если табличная функция возвратила пустой набор. Возвращаются значения NULL как значения столбцов, которые соответствуют столбцам табличной функции.
Обработка исключений в транзакциях
Более ранние версии SQL Server требуют от Вас вставлять код обработки ошибок после каждой команды, которая может вызвать ошибку, как это делается в Microsoft Visual Basic 6.0. Чтобы централизовать код проверки ошибок, Вам нужно использовать метки и операторы GOTO. Более того, такие ошибки, как, например, ошибки конвертирования типа данных, прерывают ваш пакет, так что Вы не можете их отследить с помощью Transact-SQL. SQL Server 2005 Beta 2 обрабатывает многие из этих проблем с помощью простого, но развитого механизма обработки исключений в форме конструкции TRY/CATCH Transact-SQL, идентичной конструкциям Visual Basic .NET и C#. Ошибки, которые ранее вызывали прерывание команды, области видимости, пакета или транзакции, теперь могут быть отслежены и обработаны в том случае, если эти ошибки не слишком серьезны, чтобы вызвать прерывание соединения.
Для обработки ошибок, просто введите код, который Вы хотите выполнить, в блоке BEGIN TRY/END TRY, а код обработки ошибок введите в блок BEGIN CATCH /END CATCH. Заметьте, что блок TRY должен иметь соответствующий блок CATCH, в противном случае Вы получите синтаксическую ошибку.
Уведомления о событиях DDL
SQL Server 2005 Beta 2 позволяет Вам перехватывать системные события и события DDL и отправлять уведомление о событии службе Service Broker. В отличие от триггеров, которые обрабатываются синхронно, уведомление о событии - это механизм событий, который поддерживает асинхронное получение данных. Уведомление о событии отправляет данные XML определенной службе Service Broker, и получатели событий получают эти данные асинхронно. Получатель событий может ожидать новые данные, используя расширения выражения WAITFOR команды Receive у Service Broker.
Улучшения полнотекстового поиска
SQL Server 2005 включает поддержку для полнотекстовых приложений. Каталогизирование возможностей было улучшено для обеспечения большей гибкости каталогизированных объектов. Производительность запросов и масштабируемость были заметно улучшены, и новые инструменты управления обеспечивают большие возможности работы с полнотекстовыми средствами.
Улучшения безопасности
SQL Server 2005 получил дополнительные преимущества от инициативы Trustworthy Computing - инициативы Microsoft по повышению опыта пользователей в областях безопасности, защиты информации, надежности и интеграции бизнес-процессов. Частью этой инициативы, широко представленной в январе 2002 года, является исследование Microsoft процессов разработки, которые помогают удостовериться, что наши продукты и развертывание наших продуктов безопасны с точки зрения дизайна, безопасны с настройками по умолчанию, и безопасны в развернутом виде. Команда разработки Microsoft SQL Server объединила эти процессы при разработке SQL Server 2005. После развертывания Microsoft осуществляет поддержку пользователей и партнеров по вопросам безопасности. В результате SQL Server 2005 будет включать наиболее развитые средства безопасности в любом релизе SQL Server.
Все улучшения и средства безопасности можно разделить по трем областям:
Ограничение пользовательского доступа к SQL server: больший контроль над доступом к SQL Server и улучшения в механизме, который позволяет администратору контролировать доступ к SQL Server через политики.
Отключение служб и ограничение возможности конфигурирования служб: предоставление администраторам возможности ограничивать доступ к ресурсам в SQL Server, в данных этим администраторам пределах и с определенным уровнем масштабирования, чтобы быть уверенными, что они имеют легко управляемую систему без нарушения принципа предоставления минимально возможных привелегий. Из-за того, что для новых инсталляций сервера определенные службы по умолчанию отключены, пользователи теперь более активно вовлечены в решение вопроса, какие службы они хотят включить дополнительно.
Уменьшение у новых средств мест возможных атак системы: сначала, во время установки и настройки SQL Server, количество мест возможных атак системы минимально. На протяжении всего цикла разработки продукта новые средства проверяются и тестируются на предмет безопасности, чтобы уменьшить количество мест возможных атак системы.
Заключение
Microsoft SQL Server 2005 предоставляет инструменты, которые требуются разработчикам для создания новых классов приложений базы данных. Удаляя барьеры при выполнении кода и расположении хранилища, и объединяя вместе различные стандарты, такие, как XML, SQL Server 2005 предоставляет разработчику баз данных большое количество новых возможностей. Эта статья - только вступление к описанию того, что Вы можете делать в SQL Server 2005.