В первую очередь обратим внимание на атрибут
SqlUserDefinedAggregate, который предваряет описание нашего класса. В нем
определено несколько параметров (таблица 5).
Имя параметра
Описание
Format
Формат сериализации
объектов этого класса. Подробности – в следующем разделе.
MaxByteSize
Максимальный размер
сериализованного объекта. Подробности – в следующем разделе.
IsInvariantToDuplicates
Зависит ли агрегированное
значение от наличия дубликатов во входных данных (по умолчанию – да). Например, для функции MIN() совершенно неважно, сколько раз повторяются входные
значения, а для функции SUM() – важно. Оптимизатор запросов SQL Server может
использовать эту информацию для минимизации количества вызовов метода
Accumulate.
IsInvariantToNulls
Влияет ли наличие
NULL-значений во входных данных на агрегированное значение. Для большинства
встроенных агрегирующих функций (кроме COUNT()) это так.
IsNullIfEmpty
Означает, что агрегирующая
функция возвращает NULL для пустых входных наборов. Например, функция MIN при
выполнении на пустом наборе возвращает как раз NULL , а функция COUNT() – 0.
IsInvariantToOrder
Данный параметр пока не
документирован; судя по названию, он должен определять, влияет ли на
результат порядок подачи значений в метод Accumulate(). См. примечание после
таблицы
Таблица 5.
ПРЕДУПРЕЖДЕНИЕ
Все встроенные агрегирующие функции (а
также наш пример) являются коммутативными, что позволяет серверу выбирать
порядок сканирования входных данных по своему усмотрению. Однако, например, результат функций типа First() или Last(), (которые должны возвращать
соответственно первое или последнее значение в наборе), очевидным образом
зависит от порядка входных значений. Тем не менее, пока непонятно, как можно
использовать подобные функции – дело в том, что синтаксис SQL не позволяет
определять порядок агрегирования записей. Оператор ORDER BY применим только к
выходному набору записей, и использовать в нем можно только те поля, по
которым выполняется группировка. В обычных вложенных запросах (по результатам
которых можно строить запросы с группировкой) применение ORDER BY запрещено.
Скорее всего (это только мое предположение!) разработчики MS SQL Server Yukon
предполагают использовать свойство
SqlUserDefinedAggregateAttribute.IsInvariantToOrder для тех случаев, когда
программист каким-либо способом все же может гарантировать определенное
упорядочивание входных данных – это свойство должно убедить сервер
воздержаться от переупорядочивания записей перед агрегированием. Пока что мне
не удалось обнаружить какого-либо влияния этого свойства на поведение
сервера.
Рекомендуем скачать другие рефераты по теме: диплом государственного образца, реферат по экологии.