SQL.RU
 client/server technologies
 Главная | Документация | Статьи | Книги | Форум | Блоги | Опросы | Гостевая | Рассылка | Работа | Поиск | FAQ |
   
#259<<  #260  >>#261

СОДЕРЖАНИЕ

1.СТАТЬИ
1.1.Деревья в поддерживающих стандарты SQL базах данных
1.2.Почему нежелательно использовать компрессию файлов баз данных и журналов SQL Server
1.3.Руководство по работе с Microsoft SQL Server 2000 Analysis Services (продолжение)
2.ССЫЛКИ НА СТАТЬИ
2.1.Статьи на русском языке
2.2.Англоязычные статьи
3.ФОРУМ SQL.RU
3.1.Самые популярные темы недели
3.2.Вопросы остались без ответа

Рассылке 5 лет

С июня месяца пошёл шестой год с первого выпуска этой рассылки, который увидел свет 30 мая 2000 года. В связи с этим, я хотел бы поблагодарить наших уважаемых подписчиков за неувядающий интерес к рассылке, которую мы по мере возможности стараемся делать интересной и удобной. Также, хотелось бы выразить слова благодарности авторам и переводчикам публикуемых здесь статей: Виталию Степаненко, Ирине Наумовой, Маргарите Баскаковой, Алексею Сафонову, Андрею Синкину, Андрею Натальченко, Николаю Денищенко, Сергею Гавриленко и Алексею Лимонову.

Голосовать

Наш сайт долго лидировал в конкурсе "Интернить'2005" в номинации Профессиональное сообщество.
Недавно, нас потеснили на второе место! Давайте исправим это недоразумение ;)
Если Вы относите себя к сообществу SQL.RU, прошу Вас выставить нашему сайту свою оценку.
Голосовать можно по этой ссылке: http://www.internit.ru/golos/?id=365

C уважением,
Александр Гладченко

[В начало]

СТАТЬИ

Деревья в поддерживающих стандарты SQL базах данных

По материалам статьи Eugene Lepekhin: Trees in SQL databases
Перевод Александра Гладченко

Статья рассказывает о том, как улучшить производительность деревьев в SQL.

Введение

Рано или поздно в своём проекте баз данных Вы столкнетесь с необходимостью хранения иерархической информации. Например: структура предприятия, категории товаров, каталог изделий или папок с документами; всё это хорошие примеры иерархических структур. Конечно же, можно реализовать их хранение в виде самосвязанной таблицы. Проблемы начнутся, когда нужно будет создавать запросы к иерархическим данным. Например: "Что, если мы имеем дело со структурой предприятия, и хотим узнать, сколько служащих подчиняются менеджеру X?". Такие решения подобных проблем уже были описаны. Например, можно посмотреть книгу и статьи Joe Celko, в которых есть подробные описания таких решений.
Упомянутые выше методы хороши, когда необходимо только читать данные, но когда потребуется изменять дерево, может наблюдаться значительное снижение производительности.
Автор собирается предложить свой метод, сравнимый по производительности чтения, но более производительный при модификации дерева.

Идея

Предположим, что мы имеем следующую таблицу:

Где: NodeId - первичный ключ, ParentId - внешний ключ и NodeName - некоторое дополнительное поле. Чтобы упростить последующие примеры, давайте предположим, что NodeName имеет ограничение уникальности.
Для всех представленных ниже примеров автор будет использовать следующее дерево:

Создадим ещё одну таблицу, имеющую две связи с таблицей Node:

В этой таблице NodeId и ParentId - внешние ключи, ссылающиеся на таблицу Node.
Каждая запись в таблице Tree означает, что указанный в поле Tree.NodeId узел имеет предка, указанного в поле Tree.ParentId. Под предком автор понимает любой другой узел, расположенный на пути от узла к корню дерева, то есть прямого родителя или главного родителя или самого главного родителя и так далее.
Теперь давайте убедимся, что справедлив один простой инвариант: все предки каждого узла таблицы Node перечислены в таблице Tree.
Например, для узла 4 они могут быть 2 и 1.
Непосредственный вывод из этого инварианта: очень просто можно получить полный путь от узла до корня дерева. Для этого нужно получить всё записи из таблицы Tree, связанные с искомым узлом. Давайте составим соответствующий запрос. Предположим, что мы должны найти путь к корню от узла 7.

Запрос 1:

select p.* from Node n, Tree t, Node p where n.NodeName=7 and n.NodeId = t.NodeId and t.ParentId = p.NodeId

Получился простой и понятный запрос, не правда ли?
Второй вывод из упомянутого выше инварианта: мы можем получить всех потомков узла. Из-за этого в таблице Tree перечисляются все предки для каждого узла в таблицы Node, включая конечно же всех предков искомого узла. Чтобы получить полное поддерево узла, достаточно запросить все узлы, которые имеют искомый узел в качестве предка.

Запрос 2:

select c.* from Node n, Tree t, Node c where n.NodeName=2 and n.NodeId = t.ParentId and t.NodeId = c.NodeId

Этот запрос не менее простой, как и предыдущий. Обратите внимание, что эти два запроса выдают результат в обратном порядке записей таблицы Tree.

Реализация

Перед тем, как двигаться дальше, автор хотел бы сделать два примечания.

    № 1: Из своего опыта, автор считает, что очень удобно иметь еще одно поле в таблице Tree, которое бы хранило величину удаления в дереве между узлами, указанными в NodeId и ParentId, другими словами - уровень предка. Поэтому, предлагаемая фактическая структура включает поле Level:

    № 2: Самыми распространёнными задачами, являются задачи, использующие поддеревья узла или путь к узлу от корня, включая сам этот узел. Так что было бы полезно иметь в таблице Tree непосредственно и сам узел в качестве собственного предка с уровнем 0.

Можно реализовать описанный инвариант в виде хранимой процедуры или в виде триггеров. Автор предпочитает делать это в одном триггере.
Давайте начнём с триггера на вставку (INSERT) для таблицы Node. Для примеров автор будет использовать MS SQL Server.
Прежде всего, триггер должен создать запись, удовлетворяющую примечанию № 2. Это можно сделать следующей инструкцией:

insert into Tree(NodeId, ParentId, Level) select NodeId, NodeId, 0 from inserted

После этого можно добавить список всех предков вставленного узла. Имея ввиду, что родитель каждого вставляемого узла уже имеет список всех своих предков, поэтому мы можем использовать их за основу. Но мы должны заменить NodeId родителя на id нового узла и увеличить уровень.

insert into Tree(NodeId, ParentId, Level) select n.NodeId, t.ParentId, t.Level + 1 from inserted n, Tree t where n.ParentId = t.NodeId

Таким образом, код триггера будет иметь следующий вид:

create trigger NodeInsert on Node for insert as begin set nocount on insert into Tree(NodeId, ParentId, Level) select NodeId, NodeId, 0 from inserted insert into Tree(NodeId, ParentId, Level) select n.NodeId, t.ParentId, t.Level + 1 from inserted n, Tree t where n.ParentId = t.NodeId end go

Теперь пришло время продумать триггер на UPDATE, который позаботится о родителе изменяемого узла. Цель триггера на UPDATE состоит в том, чтобы удалить все устаревшие записи в таблице Tree и заменить их новыми. Чтобы минимизировать изменения, совершаемые этим триггером, давайте повторно использовать ту информацию, которая уже имеется в таблице Tree, аналогично тому способу, который мы использовали в триггере на вставку записи. Но разве нельзя просто изменить родителя узла?
Очевидно, что непосредственно для изменяемого узла только одна запись удовлетворяет примечанию № 2. У потомков будут правильными те записи о предках, которые расположены ниже изменяемого узла, включая и сам этот узел. В то же время, каждый находящийся выше изменяемого узла предок будет устаревшим.
Например, если мы изменяем родителя для узла 4, тогда для узлов 5, 6 и 7 будут изменены только те предки, которые выше узла 4, то есть 1 и 2.
На первом шаге мы копируем всех потомков изменяемых узлов вот в такую таблицу:

declare @child table(NodeId int, Level int)

Туда мы вставляем первичные ключи всех потомков и уровни каждого из них относительно изменяемых узлов. Условие, что t.Level > 0, позволяет исключать изменяемый узел из вставки в таблицу @child.

insert into @child(NodeId, Level) select t.NodeId, t.Level from inserted n, Tree t where n.NodeId = t.ParentId and t.Level > 0

Второй шаг удаляет все устаревшие строки у всех потомков:

delete Tree where Tree.NodeId in(select NodeId from @child) and Tree.ParentId in( select t.ParentId from inserted n, Tree t where n.NodeId = t.NodeId and t.Level > 0 )

Условие, что t.Level > 0, исключает удаление изменяемых узлов.
Третий шаг удаляет устаревшие записи изменённых узлов:

delete Tree where Tree.NodeId in(select NodeId from inserted) and Tree.Level > 0

Следующие два шага заполняют таблицу Tree новой информацией. Соответственно, это будет так:

insert into Tree(NodeId, ParentId, Level) select n.NodeId, t.ParentId, t.Level + 1 from inserted n, Tree t where n.ParentId = t.NodeId

Всё это делается так же, как мы это делали в триггере на вставку.
И, наконец, пятый шаг:

insert into Tree(NodeId, ParentId, Level) select c.NodeId, t.ParentId, t.Level + c.Level from inserted n, Tree t, @child c where n.NodeId = t.NodeId and t.Level > 0

Может показаться странным, что тут не используются какие-либо соединения с таблицей @child. Но эта инструкция - именно то, что нам здесь нужно, потому что мы собираемся повторить информацию о предке для каждого детишки. Также обратите внимание на то, как мы добавляем уровень детишек, хранящийся в таблице @child, который скорее всего только 1.
Весь триггер будет таким:

create trigger NodeUpdate on Node for update as if update(ParentId) begin set nocount on declare @child table(NodeId int, Level int) insert into @child(NodeId, Level) select t.NodeId, t.Level from inserted n, Tree t where n.NodeId = t.ParentId and t.Level > 0 delete Tree where Tree.NodeId in(select NodeId from @child) and Tree.ParentId in( select t.ParentId from inserted n, Tree t where n.NodeId = t.NodeId and t.Level > 0 ) delete Tree where Tree.NodeId in(select NodeId from inserted) and Tree.Level > 0 insert into Tree(NodeId, ParentId, Level) select n.NodeId, t.ParentId, t.Level + 1 from inserted n, Tree t where n.ParentId = t.NodeId insert into Tree(NodeId, ParentId, Level) select c.NodeId, t.ParentId, t.Level + c.Level from inserted n, Tree t, @child c where n.NodeId = t.NodeId and t.Level > 0 end go

Как Вы можете видеть, это будет работать только если изменялся ParentId, и все другие изменения таблицы Node будут отфильтрованы самым первым оператором в условии.

Ограничения использования

Если Вы собираетесь одновременно вставлять или изменять более одного узла, убедитесь, что Вы не делаете это более чем для одного уровня дерева. С практической точки зрения это - не сильное ограничение.

Дополнительные шаги

Для завершения функциональности, нужно иметь возможность полностью очищать таблицу Tree и заполнять её заново. Хорошая идея, написать для этого хранимую процедуру, но автор не собирается портить Вам удовольствие создать её самостоятельно.

Примеры

Вы можете загрузить по указанной ниже ссылке необходимый SQL-код, который поможет создать обе таблицы и триггеры, а также команды для заполнения тестовыми данными таблицы Node. В загружаемом файле также содержатся запросы 1 и 2 и скрипт для изменения родителя узла.

[В начало]

Почему нежелательно использовать компрессию файлов баз данных и журналов SQL Server

По материалам статьи Ken Henderson: Why you shouldn't compress SQL Server data and log files
Перевод Ирины Наумовой

Наиболее опытные SQL Server DBA знают, что не стоит использовать автоматическое сжатие файлов данных и журналов, но я могу поспорить, что лишь немногие из них знают, почему это является таким уж плохим решением. Основным ответом на этот вопрос может быть "снижение производительности", и это правильно, но предположение о том, что производительность снижается из-за сжатия \ декомпрессии данных, это только отчасти правильное утверждение. Есть еще более важная причина.
Дело в том, что SQL Server связывает все операции ввода - вывода в файлы данных и журналов внутренним планировщиком потоков SQL Server (UMS). UMS позволяет SQL Server самому управлять выполнением операций ввода - вывода, не делая прямые вызовы WIN 32 API. Такой подход позволяет поддерживать нити, без дополнительного кода программ, реализующих потоки и нити, что предоставляет возможность работать в версиях Windows, которые не поддерживают асинхронный ввод - вывод в файл (Win9x, WinME) без написания дополнительного кода для реализации асинхронного и синхронного ввода - вывода. Повторю, что SQL Server использует способность NT выполнять операции ввода - вывода асинхронно и исполнять ввод - вывод случайным образом или одновременно (scatter / gather). Windows 9x/ME не поддерживает ни асинхронный ввод/вывод, ни технологию scatter / gather. Если абстрагироваться от UMS, SQL Server просто планирует работу, которую нужно сделать, и UMS выполняет это наиболее эффективным способом.
Один из нюансов асинхронного ввода - вывода в Windows состоит в том, что, в зависимости от того используете ли Вы API или нет, на самом деле Вы можете и не добиться асинхронного выполнения операции от операционной системы. Другими словами, хотя Вы запрашиваете асинхронное выполнение операции, Windows все же может выполнить ее синхронно и может удерживать ваш вызов API, пока операция не завершится. Относительно целесообразности выполнения асинхронного ввода-вывода решение принимает операционная система. Что произойдет, если Windows решит не выполнять запрос на асинхронный ввод - вывод, зависит от API. В случае использования функций ReadFile/WriteFile, происходит блокирование ресурсов до тех пор, пока операция не завершится и вернет значение TRUE. Вы должны отслеживать возвращаемые значения и действовать в соответствии с полученным результатом - Вы не можете написать код, который ожидает, что операция завершит в некоторый момент в будущем, если операция в действительности закончилась немедленно. При использовании ReadFileEx/WriteFileEx, использование API отрабатывает неверно - поскольку эти два API не поддерживают синхронный ввод - вывод. Если операция, которая была запрошена, не может быть выполнена асинхронно, она не будет выполнено вообще, если при этом вызывались ReadFileEx или WriteFileEx.
На Win9x/ME, UMS автоматически выполняет весь ввод - вывод в файла в синхронном режиме. Он знает, что данная версия Windows не поддерживает асинхронный ввод - вывод и поэтому выбирает соответствующий режим для выполнения операций ввода- вывода. Для NT, он всегда пытается выполнять операции ввода - вывода асинхронно, но, как я уже сказал, Windows может принять решение выполнять операции ввода / вывода в синхронном режиме.
Единственный вариант, при котором Windows никогда не использует асинхронный ввод - вывод, это когда чтение\запись производятся в сжатый файл. При выполнении ReadFile или WriteFile из сжатого файла, Windows всегда выполняет операцию синхронно, независимо от того, требовала ли вызывающая программа асинхронную операцию ввода - вывода. Это всегда истинно: сжатие файла отключает способность приложения производить чтение или запись в него асинхронно.
Таким образом, мало того, что Вы платите за сжатие/декомпрессию, когда используете сжатие файлов баз данных и журналов, но еще платите за переключения между асинхронным и синхронным вводом - выводом, и это изменение может привести к большой разнице в производительности RDBMS, таких как SQL Server. Даже если не обращать внимание на то, что теряемая функциональность является залогом надежности SQL Server, снижение производительности редко того стоит, и это даже если не брать во внимание то, как сжатие затрагивает надежность и восстанавливаемость системы. Жесткие диски достаточно дешевы, поэтому лучше не используйте сжатие данных и журналов, если только у Вас нет другого выбора.

[В начало]

Руководство по работе с Microsoft SQL Server 2000 Analysis Services (продолжение)

По материалам статьи Carl Rabeler и Dave Wickert, Microsoft Corporation: Microsoft SQL Server 2000 Analysis Services Operations Guide
Перевод Виталия Степаненко

Содержание

Введение
Управление конфигурацией
Управление выпуском
Управление изменениями
Администрирование безопасности
Управление сервисом и доступностью
Управление свободным пространством и производительностью
Управление разрешением проблем и ошибок

Ограничение Very Large Dimension Memory (VLDM)

32-битная версия Analysis Services (64-битная не использует VLDM) пытается предотвратить использование большими измерениями всего доступного адресного пространства виртуальной памяти с помощью загрузки каждого очень большого измерения в пространство своего собственного процесса со своим адресным пространством виртуальной памяти. Очень большое измерение - это такое измерение, которое превышает значение параметра VLDMThreshold в реестре. Значение порога VLDM по умолчанию равно 64 мегабайтам. Хотя использование отдельного адресного пространства для каждого измерения, которое превышает порог VLDM, действительно сохраняет адресное пространство виртуальной памяти в главном процессе, общая производительность все равно снижается, когда одно или больше измерений превышают порог VLDM. Загрузка всех измерений в пространство главного процесса (когда это возможно) дает лучшую производительность, но Вы должны убедиться, что в наличии имеется достаточный объем адресного пространства виртуальной памяти для выполнения следующего:

  • Загрузка всех измерений в память при запуске.

  • Загрузка всех измерений, которые обрабатываются в нескольких параллельных или в одной транзакции, в память во время обработки (они называются скрытыми измерениями). Analysis Services использует существующую версию каждого измерения для выполнения пользовательских запросов, пока транзакция не будет завершена. Чтобы уменьшить объем памяти, требующийся для скрытых измерений, необходимо обрабатывать измерения отдельными транзакциями. Если Вы выберите Process the Database или Process All Dimensions in Analysis Manager, то измерения будут обрабатываться в одной транзакции и потребуют большой объем памяти для загрузки каждого измерения в память дважды (первый раз при загрузке, и потом еще раз во время обработки).

  • Хранение копий измерений при необходимости. Смотрите "Копии измерений" далее в этой статье.

  • Выполнение всей обработки без использования временных файлов. Смотрите "Буфер обработки" далее в этой статье. И не следует использовать VLDM только для того, чтобы получить буфер обработки большего размера. Обработка - это разовая, в худшем случае, периодическая операция. Использование же VLDM - это постоянная нагрузка, приводящая к пониженной производительности и повышенной сложности (больше процессов, больше переключений контекста, и т.д.).

  • Создание и использование достаточно большого кэша результатов запроса. Смотрите "Кэш результатов запроса" далее в этой статье.

Если для Analysis Services не хватает адресного пространства виртуальной памяти в общем адресном пространстве, то установите порог VLDM так, чтобы в отдельные адресные пространства загружались только самые большие измерения. Для дополнительной информации о том, как Analysis Services использует доступную память, и о том, как рассчитать ее необходимый объем, смотрите "Управление свободным пространством и производительностью" далее в этой статье.

Если Analysis Services имеет достаточный объем адресного пространства виртуальной памяти в пространстве главного процесса, то отключите VLDM, изменив имя файла msmdvldm.exe в папке Bin на любое другое (например, msmdvldm-disabled.exe). Когда запустится служба стартует и не найдет исполнимый файл VLDM, то она отключит VLDM. VLDM автоматически отключается на 64-битных системах. Отключение VLDM гарантирует, что все измерения загружаются в пространство главного процесса. Учитывая снижение производительности и ограничения при использовании VLDM наилучшей практикой считается, что если Ваше приложение достаточно велико для использования VLDM, то Вам следует оценить, не лучше ли в этом случае использовать SQL Server 2000 64-битной версии для увеличения производительности.

Это важно: в общем случае, Вам следует рассмотреть возможность использования 64-битной версии Analysis Services, если:

  • Ваше BI приложение включает большие измерения или большое количество свойств.

  • В одном экземпляре Analysis Services находится большое количество баз данных и кубов.

  • Вам нужно выполнять большое количество запросов во время одновременной обработки разделов.

  • Вы не можете увеличить размер буфера обработки, чтобы исключить использование временных файлов на диске во время обработки.

Для дополнительной информации зайдите на сайт Technet Web (http://www.microsoft.com/technet) и посмотрите статью "Microsoft SQL Server 2000 (64-bit) Analysis Services: Why Migrate, and What to Expect If You Do".

На заметку: Когда порог VLDM используется для больших измерений, Analysis Services создает скрытые измерения для этих больших измерений во время обработки в главном адресном пространстве. Таким образом, даже если Вы используете VLDM, большие измерения все-таки создают ощутимое влияние на виртуальное адресное пространство главного процесса.

ПРОДОЛЖЕНИЕ СЛЕДУЕТ

[В начало]

ССЫЛКИ НА СТАТЬИ

Статьи на русском языке

Управляем вложенными транзакциями
Brian Noyes
ADO: ADO.NET позволяет вам легко оформить несколько обращений к БД в виде одной транзакции. Однако программисты часто неохотно используют такой подход, поскольку они полностью не понимают взаимодействие между транзакциями, объявленными в коде ADO.NET и транзакциями, использующимися в хранимых процедурах (ХП). Ситуация часто усугубляется исключениями, вызванными SQL Server'ом при использовании вложенных транзакций с ХП, которые сами используют транзакции. В этой статье мы проясним указанные моменты, и я покажу вам, как использовать вложенные транзакции и правильно обрабатывать ошибки...

Data Mining в SQL Server 2005
Дуглас Макдауэлл
MSSQLServer: Большинство администраторов баз данных и разработчиков, вероятно, не слишком хорошо осведомлены о функции извлечения данных. Эта функция была введена в службу SQL Server 2000 Analysis Services на исходе цикла разработки (именно это послужило причиной смены названия OLAP Services). В SQL Server 2000 функция извлечения данных реализует два алгоритма от Microsoft Research, задачи Data Transformation Services (DTS), предоставляет стандартизированные API и технологию OLE для баз данных, обеспечивающие доступ к информации для анализа, вводит новый диалект SQL для специальных команд извлечения данных на языке описания данных (Data Definition Language - DDL) и на языке манипулирования данными (Data Manipulation Language - DML), а также пользовательские средства управления. В SQ...

Технология МОМ 2005 для малого бизнеса
Карен Форстер
В комментарии Тима Хакэби по поводу продукта Microsoft Operations Manager (MOM) 2005, анонсированного в марте 2003 г., говорится, что компания Microsoft в лице технологии MOM решает задачу "максимального повышения уровня управляемости систем Windows при минимальной полной стоимости владения для корпоративных клиентов". Сегодня, учитывая факт реализации технологии MOM 2005, в приведенной цитате интересны слова "для корпоративных клиентов". Поскольку с точки зрения снижения затрат и повышения работоспособности, а также осведомленности о состоянии систем и приложений, пользователи малого и среднего бизнеса также нуждаются в обработке событий, упреждающем контроле и сигнализации, Microsoft выпустила версию MOM 2005 Workgroup Edition с ориентацией на небольшие масштабы экспл...

[В начало]

Англоязычные статьи

Surrogate key generation in SSIS
SQL BI
In the last few days I tested several ways to generate surrogate keys when loading a dimension into a data mart

Centered Images
Chris Hays's Reporting Services Sleazy Hacks Weblog
Question: I have variable sized images I want to display in a table column. How can I center these images without stretching them to fill the table cell?

Calculate day gap and create a new column for the results
Jeremy Kadlec
I would like to calculate the day gap and create a new column for the results

SQL Server Standard for MCPs
Press Release
We announced awhile back that we would be giving away the electronic version of the SQL Server Standard magazine free to all MCPs. And then immediately after the January issue, we had a problem with Microsoft and many of you wrote to me asking where you could find the March issue. Suffice it to say that despite their incredible ability to change the direction of the company, Microsoft has a good sized bureaucracy and with some internal shuffling of people, we lost our contact

SSIS: Memory Usage
Jamie Thomson's Blog
I was asked at a recent Conchango SQL Server community session how much memory SQL Server Integration Services (SSIS) was able to use and I had to confess that although I had an inkling about the 3GB Windows limit I didn't know the full details. Thankfully Ash Sharma did and he supplied the following info

XML and Web Services Go Native in SQL Server 2005
Stephen Swoyer
When Microsoft Corp. first incorporated business intelligence (BI) capabilities into its SQL Server 7.0 database seven years ago, it kicked off a firestorm of sorts, with some purists arguing that such features had no place in a relational database management system

System tables in SQL Server 2005
Adam Machanic
In reference to your article, Say goodbye to system tables in SQL Server 2005, do you mean system tables are really gone or no longer actively supported? If it is really gone then I have more up front work to do. If it is no longer actively supported I might have more time for changes

Transferring Data from One Table to Another
Gregory A. Larsen
Every DBA needs to transfer data between tables. This is the kind of task that comes up all the time. Not only do DBAs need to know how to transfer data between two tables on the same server, but they will also need to know how to do it from one server to another. This article will look at a number of different methods to transfer data from one table to another

Knock knock! Who's there? Kana! Kana Who?
Sorting It All Out
You Kana wonder how we order Japanese strings? :-)

Performing batched updates...
SQL Server Engine Tips
Updating a large table is a common scenario. This is often encountered in cases of applications that performs series of tasks in the background or data warehousing loading scenarios. To reduce locking and logging resources, such update statements are broken down into smaller batches or units of work. This has been traditionally done using SET ROWCOUNT setting in SQL Server. Now, SQL Server 2005 provides you with a simpler construct that the optimizer can understand and use efficiently. TOP clause has been enhanced in SQL Server 2005 to support expressions and can be used now in all DML operations. Let's look at a quick example on how to use TOP with UPDATE

SQL Server: Capture Object changes with SMO Capture Mode
Michiel Wories' WebLog
In a previous article I have showed how a SMO object can be serialized into a Transact-SQL script, which allows you to recreate the object. What if you want to have the script that is emitted when you changed one or more properties of an object? In that case Capture Mode comes in handy. This switches the ServerConnection object in a state where it starts capturing all statements that SMO emits instead of sending these to the server. The following sample illustrates how it is used

Usage Scenarios for SQL Server 2005 Native Web Services
Srik Raghavan
Get a detailed look at how to set up SQL Server 2005 for Web service access in a heterogeneous environment, and learn more about key scenarios for Web services in SQL Server 2005. (11 printed pages)

Connected Systems Contest
Paul Ballard
Microsoft is launching a development contest to show off various aspects of creating connected systems using tools like SQL Server 2005, BizTalk Server 2004, Visual Studio Tools for Office, and even video gaming. The grand prize is $50,000 with other prizes being products, trips, and MSDN Universal subscriptions

Up A Tree
Direct Reports
Lots of people ask me about what is coming in the next release of SQL Server 2005 Reporting Services. I put together a white paper a few months back and it finally got posted to the web last week. There are a couple of things that aren't described there, such as the XML data extension that allows you to report data from a URL or web service, but it covers most of the new features

The Trash Destination Adapter
Allan Mitchell
This article is as a result of a requirement from the Beta Newsgroups. Jamie Thomson from Conchango wanted a destination adapter that did nothing but consume rows with no setup requirement from himself. He uses this type of component when he's debugging amongst other things. There are ways of doing this currently but not by using a destination adapter. When we saw this we thought we'd build one for him and anybody else who also has this requirement

Enumerating Over Files
Allan Mitchell
let's face it, in SQL Server 2000 Data transformation Services (DTS) it was a bit of a hack to be able to loop over files of a given type in a certain directory and import them into your destination. It involved a lot of "Glue Code" and a certain amount of fooling the package into going back to a previous task because it still had work to do. Well thankfully in SQL Server 2005 Integration Services (SSIS) that has all changed and this article is going to show you how

Excel Inserts Null Values
Allan Mitchell
PROBLEM: Why does Excel Insert NULLs into my table when I know there is good data in there?

When is a database oriented as a service?
Barry Gervin's Software Architecture Perspectives
Do you consider your database as a service? It's worthwhile to review the tenents of a service oriented architecture. The first two tenents above are probably the most relevant to my question

Say goodbye to Whidbey's System.Data.SqlServer namespace
Barry Gervin's Software Architecture Perspectives
Pablo Castro writes in the new Data Access Team Blog that they are unifying System.Data.SqlServer classes into System.Data.SqlClient

Trees in SQL databases
Eugene Lepekhin
How to get all power of trees in SQL

General trees persisted in relational databases
Daniel Aioanei, Adi Malinaru
Persisting general trees in relational databases with fast path-finding capabilities

Make Sense of Your Web Feedback using SQL Server 2005
Peter Pyungchul Kim
The interactive nature of the Web has made it a great medium for data collection. As Web sites have evolved beyond click and buy, the solicitation of feedback has held the promise of greater insight into the customer and her needs, necessary product improvements, and future directions. But collecting reams of text-based data is not the same as gleaning useful information from it. In a typical customer feedback Web page, users enter comments about your product (see Figure 1). Some fields present preset answers users can choose from. Other fields let users type in any comments they like. This sort of free-form comment is especially difficult to put to good use because it must be divided into classifications if it is to be analyzed, quantified, and used for decision making

A SQL function you just CAN’T live without...
Aaron Bjork
When SQL functions were first introduced I stumbled across one function in particular that I’ve probably used more than any other. In fact, I doubt I’ve developed too many databases that didn’t use this great little function. It’s really quite simple… but very, very powerful. It’s called… fn_ParseCommaDelimitedList. This simple yet powerful little function allows you to pass in a comma delimited list of integers for use when querying a subset of rows from a table

temp table allocation in SQL 2005
Engine Watch
Temp table is no different from regular tables. We may choose either page or extent allocation to optimize performance and space utilization

Pros and cons of data warehousing with SQL Server 2000
Jeremy Kadlec
I was wondering if you could quickly outline the pros and cons of data warehousing with SQL Server 2000. The pro for the business is a system to support decision making. The pro for IT is the opportunity to work on a new system. The con is if the project is improperly planned and managed, it could require a great deal of time and budget. Data warehousing projects are typically long term, but can offer many benefits to the organization from a tactical and strategic perspective

Enumerate SQL Server Names from "SQL Server Enterprise Manager"
Muthusamy Anantha Kumar
Occasionally, SQL Server database administrators are requested to provide a list of development SQL Servers, production SQL Servers and so on. Many articles, such as "Monitor Disk Space on Multiple SQL Servers" and "Inventorying hardware and OS information on all SQL Servers" require a list of servers in a text file

Efficient Property Promotion from XML Instances (Part 2)
XQuery Inside SQL Server 2005
Last week I covered the basics of property promotion i.e. automatically extracting data from an XML instance and storing this as relational data in order to improve query readability and/or performance. If you missed this previous post, you can access it at http://blogs.msdn.com/mrorke/archive/2005/05/24/421576.aspx

[В начало]

ФОРУМ SQL.RU

Самые популярные темы недели

Кто на чем пишет клиентов под SQL Server?
Больше книг хороших и разных!
Как отследить ссылки на процедуру из других процедур?
Прошу голосовать за SQL.RU в конкурсе Интернить 2005
Дедлок. U vs X
две таблицы из одной
Блокировки на индексе
С Днем Рождения, Glory!
Как организовать собственный лог сообщений...
Безопасность данных. STOLEN DATABASE
расширенная хранимая процедура
Думаю над стратегией бекапирования нашей базы. Прошу обсудить...
Что такое транзакция?
Одним select'ом исключить строки
Запретить повторение!
После переноса хп с 6.5 на 2K существенное падение производительности.
Help me! Работа с составным ключем (PK).
The process could not execute 'sp_repldone/sp_replcounters' on 'EXCITER2'.
Linked Server и Insert
Как выбрать запись с минимальным значением в одной из колонок?

[В начало]

Вопросы остались без ответа

SQL2005: использование НЕ NETBIOS имен серверов при репликации
Процедура sp_OAMethod 'load' XML из Sharepoint
Полнотектовый поиск
Как отправить с помощью sp_send_cdosysmail текст больше 8000 символов (вариант)
DTS (вставка формул в Excel)
Я опять про архивы
Помогите выбрать из нескольких книг.

[В начало]

#259<<  #260  >>#261
Rambler's Top100 Рейтинг@Mail.ru  Administrator: Обратная связь 
Copyright: SQL.Ru 2000-2013