Рассылка закрыта
При закрытии подписчики были переданы в рассылку "Вопросы и ответы по MS SQL Server" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
MS SQL Server - дело тонкое...
Информационный Канал Subscribe.Ru |
#232<< #233 |
СОДЕРЖАНИЕ Исследуем возможности CASE
По материалам статьи Arthur Fuller :
Exploring the uses of CASE
Вы имеете прекрасную возможность составлять условия выборки для своих запросов к SQL
Server таким образом, что бы получить очень гибкие варианты представления возвращаемых
данных. SELECT <myColumnSpec> = CASE WHEN <A> THEN <somethingA> WHEN <B> THEN <somethingB> ELSE <somethingE> END Нужно заменить взятые в треугольные скобки параметры из приведенного выше примера, например, как это делается в следующем примере: USE pubs GO SELECT Title, 'Price Range' = CASE WHEN price IS NULL THEN 'Unpriced' WHEN price < 10 THEN 'Bargain' WHEN price BETWEEN 10 and 20 THEN 'Average' ELSE 'Gift to impress relatives' END FROM titles ORDER BY price GO Это типичный вариант использования CASE, но Вы можете взять от CASE намного больше. Например, посмотрите как функция CASE может быть использована в предложении GROUP BY: SELECT 'Number of Titles', Count(*) FROM titles GROUP BY CASE WHEN price IS NULL THEN 'Unpriced' WHEN price < 10 THEN 'Bargain' WHEN price BETWEEN 10 and 20 THEN 'Average' ELSE 'Gift to impress relatives' END GO Вы даже можете дополнить этот запрос сортировкой, добавив предложение ORDER BY: USE pubs GO SELECT CASE WHEN price IS NULL THEN 'Unpriced' WHEN price < 10 THEN 'Bargain' WHEN price BETWEEN 10 and 20 THEN 'Average' ELSE 'Gift to impress relatives' END AS Range, Title FROM titles GROUP BY CASE WHEN price IS NULL THEN 'Unpriced' WHEN price < 10 THEN 'Bargain' WHEN price BETWEEN 10 and 20 THEN 'Average' ELSE 'Gift to impress relatives' END, Title ORDER BY CASE WHEN price IS NULL THEN 'Unpriced' WHEN price < 10 THEN 'Bargain' WHEN price BETWEEN 10 and 20 THEN 'Average' ELSE 'Gift to impress relatives' END, Title GO
Обратите внимание, что в последнем примере запроса необходимо повторять относящийся к
CASE блок кода в блоке SELECT, чтобы его можно было использовать в блоке GROUP BY. Артур Фаллер разрабатывает приложения базы данных уже в течение более 20 лет. Основными его инструментами являются Access ADP, Microsoft SQL 2000, MySQL и .NET. Поддержка XML в Microsoft SQL Server 2005 (окончание)
По материалам статьи Shankar Pal, Mark Fussell и Irwin Dolobowsky:
XML Support in Microsoft SQL Server 2005
Введение Выполнение запросов к представлениям XML с использованием XPath Создав представление XML в базе данных, Вы можете выполнять запросы к этому представлению так же, как если бы действительно существовал документ XML, используя язык запросов XPath. SQLXML поддерживает подмножество языка запросов XPath 1.0. Когда XPath используется вместе с конвертацией, SQLXML создает команду FOR XML EXPLICIT, которая посылается в SQL Server. Результирующие данные получаются и форматируются в соответствии с конвертацией. Для дополнительной информации о подиножестве XPath, поддерживаемом представлениями XML, смотрите документацию о SQLXML. Обновление через представления XML с использованием апдейтаграмм Вы можете изменять (вставлять, обновлять или удалять) данные в базе данных SQL Server через представление XML, используя апдейтаграмму на представлении XML Вашей базы данных. Структура апдейтаграммы Апдейтаграмма - это документ XML с элементами <sync>, <before> и <after>, которые формируют синтаксис апдейтаграммы. Каждый блок <sync> содержит один или более блоков <before> и <after>. <before> отражает существующее состояние (также называемое "состояние до") экземпляра записи. <after> определяет новое состояние после изменения данных. Удаляет ли апдейтаграмма экземпляр записи, вставляет его или обновляет, зависит от содержимого блоков <before> и <after>. Операции вставки Апдейтаграмма указывает на операцию вставки, если экземпляр записи появляется в блоке <after>, но отсутствует в соответствующем блоке <before>. В этом случае апдейтаграмма вставляет запись из блока <after> в базу данных. Операции удаления Апдейтаграмма указывает на операцию удаления, если экземпляр записи появляется в блоке <before>, но отсутствует в соответствующем блоке <after>. В этом случае апдейтаграмма удаляет из базы данных запись из блока <before>. If an element that is specified in the updategram either matches more than one row in the table or does not match any table row, the updategram returns an error and cancels the entire <sync> block. Only one record at a time can be deleted by an element in the updategram.Если элемент, который определен в апдейтаграмме совпадает с более чем одной строкой в таблице или не совпадает ни с одной строкой, то апдейтаграмма возвращает ошибку и отменяет выполнение всего блока <sync>. За один раз при помощи элемента апдейтаграммы можно удалить только одну запись. Операции обновления Когда Вы обновляете существующие данные, Вы должны определить оба блока <before> и <after>. Апдейтаграмма использует элементы, которые определены в блоке <before>, чтобы идентифицировать существующие записи в базе данных. Соответствующие элементы в блоке <after> показывают, как должны выглядеть записи после выполнения операции обновления. Элемент в блоке <before> должен совпадать только с одной строкой таблицы в базе данных. Если элемент совпадает с множеством строк талблицы или не совпадает ни с одной строкой, то апдейтаграмма возвращает ошибку и отменяет выполнение всего блока <sync>. Дополнительная информация Для дополнительной информации о создании и использовании апдейтаграмм для изменения данных через представления XML смотрите Использование апдейтаграмм для изменения данных. Bulk загрузка данных XML через представления XML Bulk загрузка XML - это COM-объект, который позволяет Вам загружать данные XML в таблицы SQL Server. Вы можете вставлять данные XML в базу данных SQL Server, используя команду INSERT и функцию OPENXML; однако утилита bulk загрузки обеспечивает более высокую производительность, когда Вам нужно вставить большое количество данных XML. Bulk загрузка XML обрабатывает схему конвертации и определяет таблицы, в которые нужно вставить данные XML. Затем она заносит данные XML в реляционные таблицы. Т.к. исходный документ XML может быть большим, весь документ не читается в память для выполнения bulk загрузки. Вместо этого bulk загрузка представляет данные XML в виде потока и читает его. Когда утилита читает данные, она определяет таблицы базы данных, создает нужные записи из источника данных XML и после этого отправляет записи в SQL Server для вставки. Для дополнительной информации о работе и использовании bulk загрузки смотрите Выполнение bulk загрузки данных XML. Методы доступа к данным SQLXML По сравнению с SQL Server 2000 были добавлены два новых способа использования функциональности SQLXML:
* Управляемые классы SQLXML Кроме того, доступ HTTP к SQL Server был улучшен для обеспечения поддержки апдейтаграмм в шаблонах. Управляемые классы SQLXML Управляемые классы SQLXML обеспечивают функциональность SQLXML 3.0 в Microsoft .NET Framework. Используя управляемые классы SQLXML, Вы можете написать приложение C# для того, чтобы получить доступ к данным XML из экземпляра SQL Server, вытащить данные в среду .NET Framework, обработать их и отправить обновления обратно в SQL Server. Для дополнительной информации об использовании управляемых классов SQLXML смотрите Поддержка SQLXML .NET. Сетевые службы SQLXML Поддержка сетевых служб в SQLXML представляет SQL Server в виде сетевой службы, которая предлагает функциональность SQL Server клиентам. Вы можете отправлять запросы SOAP HTTP на сервер, на котором работает SQLXML, для выполнения хранимых процедур, пользовательских функций (UDFs) и шаблонов. Сетевые службы также устанавливаются с помощью IIS Virtual Directory Management в утилите SQL Server. Когда Web Services Virtual Directory установлена, Вы можете добавлять хранимые процедуры и шаблоны на Ваш сайт. Клиенты могут после этого получать доступ к этим службам по HTTP через протокол SOAP. SQL Server 2005 теперь включает встроенную поддержку сетевых служб на сервере. Однако только SQLXML поддерживает доступ к шаблонам XML через сетевые службы. Кроме того, SQLXML может быть установлен не на сервере, на котором стоит база данных, создавая отдельный от базы данных средний уровень. Для дополнительной информации о сетевых службах SQLXML смотрите Поддержка сетевых служб (SOAP) в SQLXML. XQuery в .NET Framework 2.0 Чтобы дополнить появление XQuery в SQL Server 2005, процессор XQuery среднего уровня встроен в пространство имен System.Xml.Query в релизе .NET Framework V2.0 в Visual Studio 2005 Beta. В этой главе мы покажем, как это дает возможность выполнять запросы и объединять различающиеся источники данных, такие, как файлы и реляционные данные, хранимые в азах данных SQL Server. Ниже дан самый простой пример кода запроса, использующегося для выборки всех книг в книжном магазине, которые имеют свойство литературного стиля - автобиография и вывода названий книг в виде нового магазина. Загружаемый локальный файл называется "books.xml", а результаты выполнения запроса сохраняются в другой локальный файл с названием "output.xml". using (XmlWriter writer = XmlWriter.Create("output.xml")) { XQueryCommand xq = new XQueryCommand(); string query = "<bookstore>" + "{ for $s in /bookstore/book " + "where $s/@genre='autobiography' " + "return $s/title }" + "</bookstore>"; xq.Compile(query); xq.Execute("books.xml", new XmlUrlResolver(), writer); } Ниже показан запрос: <bookstore> {for $s in /bookstore/book where $s/@genre='autobiography' return $s/title} </bookstore> Класс XQueryCommand - это процессор XQuery. Запрос сначала компилируется методом Compile, которые выполняет проверку типа значений и генерирует исполнимый код. Метод Execute выполняет запрос, используя в качестве входных данных документ books.xml. Класс XQueryCommand также может выполнять запросы по данным в реляционных таблицах в SQL Server с возможностью встроенных команд T-SQL в выражении XQuery. В результате это позволяет интегрировать два различных языка запросов, работающих в разных доменах, и дополняет SQL Server 2005, где команда XQuery встроена в команду T-SQL. В показанном ниже коде запрос используется для выборки всех клиентов из тестовой базы данных Northwind. declare namespace sql='http://schemas.microsoft.com/framework/2003/xml/sql'; <Customers>{ $for $customer in sql:query("select * from customers", "conn")/* return customer }</Customers> Метод sql:query позволяет Вам выполнить запрос T-SQL, результаты которого возвращаются в виде документа XML в том же виде, что и у функции XQuery doc(). Если результат состоит из реляционных типов, то он конвертируется в XML на клиенте в виде эффективного потока. Если результаты запроса SQL уже являются данными XML, например, в случае запроса FOR XML или запроса данных XML, то используется результат запроса. Если результат не возвращается, как в случае большинства команд T-SQL DML, то этот результат обрабатывается как пустой документ, т.е. это не воспринимается как ошибка. Ниже показан результат этого XQuery, который выводит всех клиентов из таблицы клиентов, обрамленных в элемент Customers. Элемент строки автоматически создается для каждой строки таблицы. <Customers> <row> <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> </row> <row> <CustomerID>ANATR</CustomerID> <CompanyName>Ana Trujillo Emparedados y helados</CompanyName> <ContactName>Ana Trujillo</ContactName> <ContactTitle>Owner</ContactTitle> <Address>Avda. de la Constitucion 2222</Address <City>Mexico D.F.</City <PostalCode>05021</PostalCode> <Country>Mexico</Country> <Phone>(5) 555-4729</Phone> <Fax>(5) 555-3745</Fax> </row> ... </Customers> Чтобы выполнить этот запрос в SQL Server, используется следующий код. static String ConnectionString = "database=Northwind; Data Source=localhost;Integrated Security=SSPI"; using (SqlConnection connection = new SqlConnection(ConnectionString)) { XmlDataSourceResolver resolver = new XmlDataSourceResolver(); resolver.Add("conn", connection); XQueryCommand xq = new XQueryCommand(); StreamReader reader = new StreamReader("query.xml"); xq.Compile(reader); XmlWriterSettings settings = new XmlWriterSettings(); settings.Indent = true; settings.ConformanceLevel = ConformanceLevel.Auto; using (XmlWriter writer = XmlWriter.Create("output.xml", settings)) { try { connection.Open(); xq.Execute(resolver, writer); } catch (Exception e) { Console.Out.WriteLine(e.Message); Console.Out.WriteLine(e.InnerException.Message); } } } Этот класс XmlDataSourceResolver играет роль связывания соединения базы данных с именем, которое может быть использовано в вызове sql:query. Запрос читается из локального файла query.xml, компилируется, и создается XmlWriter для записи результатов. Заметьте, что установка ConformanceLevel.Auto используется в XmlWriter, который автоматически определяет, что создано - фрагмент или документ, и, благодаря возможности конструировать элементы в результате, XQuery может генерировать и фрагмент, и документ. Перед выполнением запроса открывается соединение к базе данных, выполняется запрос и результаты записываются в файл. Команда sql:query очень гибкая и мощная из-за возможности поддерживать именованные параметры в запросе T-SQL и вызывать хранимые процедуры на сервере. Именованные параметры в sql:query работают так же, как классы System.Data.SqlClient. Параметр передается в запрос T-SQL, обозначаемый как "@" и имя. Привязка между этим именем и действительным значением далее передается в виде параметра в запрос. Для каждого именованного параметра соответствующее значение (определяемое позицией в последовательности) используется для привязки. Количество имен параметров должно совпадать с количеством привязок языка. Лучше всего это представлено в следующем примере: declare namespace sql='http://schemas.microsoft.com/framework/2003/xml/sql'; let $country := "USA" <Customers>{ for $customer in sql:query("select * from customers where Country = @country", "conn", {"@country"}, {$country}) return $customer/PostalCode }</Customers> В этом случае параметр country передается в запрос T-SQL, связывая переменную XQuery $country с параметром @country. Результатом является список всех почтовых индексов клиентов в США. Функция sql:query также может использоваться для вызова хранимой процедуры T-SQL, передавая параметры описанным выше путем, если это необходимо. Показанный ниже пример демонстрирует, как вызвать хранимую процедуру "Ten Most Expensive Products" из базы данных Northwind, которая не имеет входных параметров. declare namespace sql ='http://schemas.microsoft.com/framework/2003/xml/sql'; for $prod in sql:query('Exec "Ten Most Expensive Products"', "conn") return $prod Заключение В этой статье описываются технологии, связанные с XML в SQL Server 2005. Особенности серверной стороны включают встроенное преобразование для хранения XML, индексирование и обработку запросов. Существующие особенности, такие, как FOR XML и OpenXML, также были улучшены. Поддержка клиентской стороны содержит улучшения в ADO.NET для поддержки данных типа XML и улучшения в System.Xml для поддержки XQuery для выполнения запросов на различных источниках данных XML. Кроме того, улучшения в технологии конвертации SQLXML теперь встроены в SQL Server 2005. Поддержка серверной и клиентской стороны полезна для разных случаев. Тип XML обеспечивает простой механизм хранения данных XML через вставку данных XML в нетипизированный столбец XML. Использование схем XML для определения типизированного XML помогает ядру базы данных оптимизировать хранение этих данных и выполнение запросов помимо обеспечения проверки данных. Тип XML сохраняют порядок документа и полезны для таких приложений, как приложения документооборота. Этот тип также может обрабатывать рекурсивные схемы XML. Реляционная модель данных и сейчас является лучшим выбором для структурированных данных с известной схемой. Даже [n]varchar(max) подходит для случаев, когда выполнение запросов и обновление не так важны. Технология конвертации SQLXML полезна, когда Вы хотите использовать модель программирования на основе XML, с реляционными данными, хранящимися в таблицах на сервере. Конвертация основана на определении схемы XML в виде представления XML. Конвертация может быть использована для bulk загрузки данных XML в таблицы и для выполнения запросов по таблицам, используя XPath 1.0. Порядок документа при этом не сохраняется, поэтому технология конвертации полезна для обработки данных XML, в противоположность обработке документов XML. Основные классы XML в System.Xml в будущем релизе .NET Framework V2.0 Beta 1 позволят Вам читать, записывать, перемещать и изменять XML. С улучшениями в производительности, типизировании и выполнении запросов поддержка XML в релизе V2.0 продолжает лидировать в инновациях, поддержке стандартов и простоте использования. Эта поддержка также включает процессор XQuery для управления источниками XML вне SQL Server. Технологии серверной и клиентской стороны дополняют друг друга. Технология конвертации может усилить возможности серверной стороны, такие, как поддержка порядка документа и рекурсивные схемы, и найти больше применения в приложениях. С другой стороны, CLR расширяет возможности существующих инструментов XML, таких, как трансформация XSLT в данные XML. Обработки XQuery на сервере и на клиенте сильно связаны между собой, а также со спецификацией XQuery от ноября 2003 года. Обработки схем XML на серверном и среднем уровнях также сильно связаны. Shankar Pal - Program Manager ядра SQL Server, работающий в области технологий XML на стороне сервера. Mark Fussell - ведущий Program Manager в команде WebData в Microsoft, которая разрабатывает технологии доступа к данным, включая компоненты в пространствах имен System.Xml и System.Data в .NET Framework, Microsoft XML Core Services (MSXML) и Microsoft Data Access Components (MDAC). Его адрес: http://weblogs.asp.net/mfussell. Статьи на русском языке
Создание таблиц средствами SQL-DMO
Showplan for non SA or DBO users Самые популярные темы недели
В блокировочнике никогда нельзя быть уверенным за правильность отчета?!
Пару вопросов по трассам Журнал "SQL Server для профессионалов", январский выпуск
Журнал, посвященный вопросам разработки и администрирования Microsoft SQL Server. Подписка без дискеты - индекс: 79946.
Подписка с дискетой - индекс: 79947. На дискете размещаются исходные тексты ко всем статьям номера. Исходники
также можно скачать с сайта журнала, если обратиться по адресу, приведенному ниже. Периодичность выпуска - один
раз в месяц. Минимальный срок подписки - 1 месяц. Информацию о ранее вышедших номерах можно найти по адресу
http://newsletter.narod.ru Editorial: Ключи к базе данных Джо Селко (Joe Celko)
Microsoft вовсю рекламирует применение CLR в следующей версии SQL Server 2005. Например:
«Используя интеграцию с common language runtime (CLR), вы сможете программировать ваши
хранимые процедуры, функции и триггеры на любом из языков, поддерживающих .Net Framework». Меняем плохое на ужасное!
Следующая цитата от Microsoft поистине интересна: «Вы сможете лучше применить знания и опыт, ранее приобретенные при написании кода». Справедливости ради отметим, что по ссылке http://msdn.microsoft.com/sql/2005/2005articles/default.aspx?pull=/library/en-us/dnsql90/html/sqlclrguidance.asp вы сможете найти большую статью «Using CLR Integration in SQL Server 2005», в которой представлена позиция Microsoft в отношении использования CLR в рамках SQL Server 2005. Говорите на Microsoft?
Когда языки располагались за рамками СУБД, у нас были
стандарты, определенные ANSI/ISO, которые определяли интерфейсы. Но языки
были вне СУБД и не вызывали срабатывания триггеров или исполнения хранимых
процедур, написанных на множестве разных языков. Теперь все это в прошлом.
Код представляет собой такую смесь, что вы никогда не выйдете из-под опеки
Microsoft и не сможете взаимодействовать с иным источником данных. DB Design & Warehousing: Применение MDX в Analysis Services: измерение происходящих изменений Уильям Пирсон (William Pearson)
Эта статья посвящена изучению применения реализующих концепцию времени функций MDX в
аналитических продуктах, которые мы собираемся создать в контексте проектирования
выражений. Мы на практике обеспечим поддержку анализа зависимости показателей от времени,
такого как количественное представление изменений значений величин со временем, с помощью
специально предназначенных для этого функций MDX. Более того, мы выполним упражнения по
реализации этих концепций в рамках наших источников данных OLAP. Рисунки к данной статье
находятся на прилагаемой к журналу дискете, а также по адресу
htpp://newsletter.narod.ru.
Измерение происходящих изменений при помощи выражений MDX Мы исследуем измерение времени Time, которое входит в подавляющее большинство создаваемых кубов. Потребности составления финансовых и прочих деловых отчетов практически всегда включают элемент времени. Это делается в целях отнесения результатов к определенному периоду отчетности, в целях создания базиса для сравнения результатов текущего периода с результатами только что закончившегося периода (будь то год, квартал, месяц или что угодно) или же для сравнения параллельных периодов (так в терминологии Analysis Services называется, например, текущий месяц предыдущего года). Это позволяет учесть в ведении бизнеса сезонные факторы, а также проверить эффективность новых инициатив (таких как маркетинговые кампании), внедренных в текущем квартале, по сравнению с прошлым кварталом и т. д. DB Design & Warehousing: Применение множеств в MDXзапросах Уильям Пирсон (William Pearson)
Эту статью мы посвятим исследованию множеств MDX. Для этого нам потребуется твердый
фундамент знаний основ запросов MDX, поэтому в качестве подготовительного шага мы разберем
строение и действие запросов MDX. Затем мы перейдем к анализу множеств MDX.
Представляем запросы MDX
Наша первостепенная задача — дать читателям хорошее знание операторов запросов MDX и
понимание их отличий от многомерных выражений. Как мы заметили в предыдущих статьях,
выражение вычисляет одиночное значение. Выражения могут применяться для извлечения
информации из источников данных OLAP в различных приложениях, среди которых Excel
PivotTable Reports и Office PivotTable List. В отличие от них запрос используется для
извлечения множества значений из куба. Запросы лежат в основе составления отчетов с
помощью компонентов PivotTable, зачастую мы не видим их, когда визуально формируем отчеты,
используя эти или иные инструментальные средства. Other: Улучшение откатов с помощью использования виртуальных машин Джон Пол Кук (John Paul Cook)
Каждый администратор и разработчик БД уже предохранен транзакционным откатом в некоторой
точке. Возможно, это был оператор DELETE без конструкции WHERE или с некорректно
определенной конструкцией WHERE. Несмотря на всю эффективность оператора ROLLBACK иногда
его просто недостаточно, и даже восстановление БД из резервной копии не всегда решает
проблему. Rambler - разработчикам: поиск по MSDN
Компания Rambler продолжает расширять линейку сервисов, предназначенных для
разработчиков и технических специалистов. В конце ноября 2004 года был официально запущен проект msdn.rambler.ru,
позволяющий быстро и легко найти информацию о всех средствах разработки, программных интерфейсах и языках
программирования, поддерживаемых Microsoft. За два месяца, прошедших с момента официального запуска сервиса, им
воспользовались уже 10 тыс. человек.
Microsoft Developer Network (MSDN) представляет собой набор on-line и
off-line сервисов, созданных для того, чтобы помочь разработчикам создавать приложения на базе продуктов и технологий
Microsoft. MSDN Library - это наиболее полная и подробная web-библиотека, содержащая документацию, технические
статьи и справочные руководства для программистов и системных администраторов. |
#232<< #233 |
Вопросы, предложения, коментарии, замечания, критику и т.п. оставляйте Виталию Степаненко и Александру Гладченко в форуме: Обсуждение рассылки
|
http://subscribe.ru/
http://subscribe.ru/feedback/ |
Подписан адрес: Код этой рассылки: comp.soft.winsoft.sqlhelpyouself |
Отписаться |
В избранное | ||