Подтвердить что ты не робот

Пользовательские агрегированные функции в MS SQL Server?

Как создать настраиваемую функцию агрегации в MS SQL Server? Пример поможет много.

4b9b3361

Ответ 1

SQL Server 2000 официально не поддерживает настраиваемые агрегированные функции. Тем не менее, я недавно нуждался в такой функциональности, и я нашел эту статью в освещении:
http://weblogs.sqlteam.com/jeffs/articles/1490.aspx

Это немного хак-иш: он требует доступа к расширенным процедурам sp_OA___.

Резюме состоит в том, что вы можете имитировать агрегатную функцию с помощью четырех функций-оболочек, каждая из которых выполняет одну из следующих задач:

  • Создайте объект ActiveX, который может содержать состояние в запросе. Вызовите это перед запуском запроса.
    • Сделайте фактическую агрегацию с помощью объекта ActiveX.
    • Очистить состояние объекта ActiveX в границах GROUP BY
    • Уничтожьте объект. Вызовите это после запуска запроса и во время обработки ошибок.

Затем вы включаете элементы 2 и 3 в список выбора для своего запроса, а элемент 2 также должен быть обернут существующей функцией совокупности без эффекта, например MAX() или MIN(). Вы также можете использовать эту технику для кумулятивных функций, чтобы делать такие вещи, как номера строк.

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