Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Конкатенация строк через User-defined Aggregates  [new]
zenk
Member

Откуда: Москва
Сообщений: 115
Добрый день!

У нас есть FAQ Сложение символьных полей в запросе,
в котором есть ссылка на статью 5 cпособов сделать агрегацию строк в SQL Server'е,

в которой про User-defined Aggregates написано следующее:
Да, еще есть способ агрегировать строки через CLR Aggregate Functions, но это вообще мрачный жёппий, ибо вусмерть медленно и весьма нетривиально.

На основании чего сделан такой вывод, автор статьи не пояснил.

Он действительно прав?

Если кто-то пытался использовать CLR функции для конкатенации, можно вас попросить поделиться её кодом?
15 июн 12, 13:00    [12719236]     Ответить | Цитировать Сообщить модератору
 Re: Конкатенация строк через User-defined Aggregates  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
zenk,

а чем FOR XML PATH('') не устраивает?
15 июн 12, 13:27    [12719525]     Ответить | Цитировать Сообщить модератору
 Re: Конкатенация строк через User-defined Aggregates  [new]
invm
Member

Откуда: Москва
Сообщений: 9825
zenk,

Такую функцию даже писать не надо -- пример есть в документации. Только вот ее практическая ценность практически нулевая, т.к. нет средств конкатенировать строки в нужном порядке.
15 июн 12, 13:37    [12719628]     Ответить | Цитировать Сообщить модератору
 Re: Конкатенация строк через User-defined Aggregates  [new]
zenk
Member

Откуда: Москва
Сообщений: 115
invm,

Мысли вслух. Если в этих функциях возможно использование массивов,
то можно конкатенировать значения в нужном порядке в функции Terminate.
15 июн 12, 14:51    [12720383]     Ответить | Цитировать Сообщить модератору
 Re: Конкатенация строк через User-defined Aggregates  [new]
zenk
Member

Откуда: Москва
Сообщений: 115
iap,

есть надежда, что быстродействие такой функции должно быть хорошим.

Встроенные агрегатные функции работают быстро? Быстро.

Надеюсь, что такое же утверждение верно и для определённых пользователем функций.
Ведь чем глубже мы встраиваем наш код, тем меньше накладных расходов получаем при его исполнении.
15 июн 12, 14:56    [12720447]     Ответить | Цитировать Сообщить модератору
 Re: Конкатенация строк через User-defined Aggregates  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
zenk
iap,

есть надежда, что быстродействие такой функции должно быть хорошим.

Встроенные агрегатные функции работают быстро? Быстро.

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


хмм...
15 июн 12, 15:05    [12720551]     Ответить | Цитировать Сообщить модератору
 Re: Конкатенация строк через User-defined Aggregates  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
zenk,

говорят, пользовательские CLR функции работают небыстро.
К тому же в результате у них всё сводится к тем же запросам на TSQL,
если требуется обращение к объектам БД.
Не лучше ли сразу на TSQL писать?
15 июн 12, 15:13    [12720657]     Ответить | Цитировать Сообщить модератору
 Re: Конкатенация строк через User-defined Aggregates  [new]
invm
Member

Откуда: Москва
Сообщений: 9825
zenk
invm,

Мысли вслух. Если в этих функциях возможно использование массивов,
то можно конкатенировать значения в нужном порядке в функции Terminate.
И чем этот порядок будет определяться? Только дополнительным аргументом, значение которого еще надо каким-либо образом рассчитать. И какой выигрыш даст весь этот гимор, по сравнению с FOR XML PATH('')?
15 июн 12, 15:16    [12720687]     Ответить | Цитировать Сообщить модератору
 Re: Конкатенация строк через User-defined Aggregates  [new]
zenk
Member

Откуда: Москва
Сообщений: 115
Нашёл подробное описание
http://www32.brinkster.com/srisamp/sqlArticles/article_44.htm

Будет время - попробую.
15 июн 12, 16:14    [12721428]     Ответить | Цитировать Сообщить модератору
 Re: Конкатенация строк через User-defined Aggregates  [new]
zenk
Member

Откуда: Москва
Сообщений: 115
Winnipuh,

ну, если сравнить , быстродействие встроенной Sum и какой-нибудь самописной, суммирующей значения для каждого входного параметра? (я этого не делал, думаю, что результат очевиден)
15 июн 12, 16:17    [12721459]     Ответить | Цитировать Сообщить модератору
 Re: Конкатенация строк через User-defined Aggregates  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
zenk
Мысли вслух. Если в этих функциях возможно использование массивов,
то можно конкатенировать значения в нужном порядке в функции Terminate.

есть надежда, что быстродействие такой функции должно быть хорошим.
Даже если предположить, что это так, то, на малых объемах разница будет ничтожна, на больших же вам понадобится столько памяти для хранения и последующей сортировки массива, что имхо овчина выделки не стоит.
zenk
Встроенные агрегатные функции работают быстро? Быстро.
Назовите мне хотя бы одну встроенную агрегатную функцию которой не безразличен порядок?
16 июн 12, 01:20    [12723848]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить