Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Агрегатные функции MSSQL 2005  [new]
Stanislav
Member

Откуда: Донецк
Сообщений: 631
У кого есть пример написания агрегатной функции и подключения ее к MSSQL 2005?
Или ссылка хотя бы где почитать по русски.
Интересует конкретно функция сбора текстового поля. т.е. значения колонки а б в
функция должна сгруппировать в одну строку а,б,в

Заранее благодарен
4 апр 08, 10:30    [5502636]     Ответить | Цитировать Сообщить модератору
 Re: Агрегатные функции MSSQL 2005  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
https://www.sql.ru/forum/actualthread.aspx?tid=487787&pg=1&hl=stuff+from+for+xml+path?

Сообщение было отредактировано: 4 апр 08, 10:34
4 апр 08, 10:34    [5502661]     Ответить | Цитировать Сообщить модератору
 Re: Агрегатные функции MSSQL 2005  [new]
Stanislav
Member

Откуда: Донецк
Сообщений: 631
tpg
https://www.sql.ru/forum/actualthread.aspx?tid=487787&pg=1&hl=stuff+from+for+xml+path?

Спасибо, но это не совсем то. Меня интересует именно агрегатная функция MSSQL2005, которая делается в VS компилится в dll и заливается в MSSQL.
4 апр 08, 10:37    [5502686]     Ответить | Цитировать Сообщить модератору
 Re: Агрегатные функции MSSQL 2005  [new]
KGP
Member

Откуда: Москва
Сообщений: 4557
Stanislav
У кого есть пример написания агрегатной функции и подключения ее к MSSQL 2005?
Или ссылка хотя бы где почитать по русски.
Интересует конкретно функция сбора текстового поля. т.е. значения колонки а б в
функция должна сгруппировать в одну строку а,б,в

Заранее благодарен


В BOL есть пример аггрегата (конкатенация) строковых полей
4 апр 08, 10:39    [5502698]     Ответить | Цитировать Сообщить модератору
 Re: Агрегатные функции MSSQL 2005  [new]
-=DiM@n=-
Member

Откуда: Москва
Сообщений: 1564
http://www.economicsoft.ru/articles/new_tech/CLR/
4 апр 08, 10:41    [5502716]     Ответить | Цитировать Сообщить модератору
 Re: Агрегатные функции MSSQL 2005  [new]
Stanislav
Member

Откуда: Донецк
Сообщений: 631
-=DiM@n=-
http://www.economicsoft.ru/articles/new_tech/CLR/

Спасибо! то что нужно.
4 апр 08, 10:53    [5502796]     Ответить | Цитировать Сообщить модератору
 Re: Агрегатные функции MSSQL 2005  [new]
Stanislav
Member

Откуда: Донецк
Сообщений: 631
Ну, готовый исходник агрегата откомпилил. подключил, работает. Теперь решил разобраться, как пишеться сам агрегат, в принципе все понятно, кроме одного для чего нужен метод merege.
Честно говоря незнаю куда и писать этот вопрос сюда или все же в ветку по C++.

Заранее благодарен.
17 апр 08, 14:53    [5561542]     Ответить | Цитировать Сообщить модератору
 Re: Агрегатные функции MSSQL 2005  [new]
Stanislav
Member

Откуда: Донецк
Сообщений: 631
все разобрался... )))
17 апр 08, 15:05    [5561643]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Агрегатные функции MSSQL 2005  [new]
Nicola_r
Member

Откуда:
Сообщений: 12
Непонятно как обойти ограничение на размер результата в 8000 байт
Плюс разделитель туда не передать.
Цитата из MSDN:
MaxByteSize -
Размер нужен для хранения состояния статистической функции во время вычисления. Максимальный допустимый размер равен 2 ГБ. Можно указать число от 1 до 8000 байт, или -1 для указания значения больше 8000 байт вплоть до 2 ГБ.

Однако если сделать MaxByteSize=-1, то студия выдает ошибку, что не найдено поле MaxByteSize :)

ЗЫ: все это прикольно, но сдается мне проще, быстрее, надежнее - по старинке, процедура и там через курсор конкатинировать строки :)
14 июн 09, 15:28    [7297396]     Ответить | Цитировать Сообщить модератору
 Re: Агрегатные функции MSSQL 2005  [new]
AAron
Member

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

ага, когда в одном запросе надо посчитать sum, max, concat с группировокой использовать курсор - замечательная мысль
14 июн 09, 22:04    [7298031]     Ответить | Цитировать Сообщить модератору
 Re: Агрегатные функции MSSQL 2005  [new]
DeColo®es
Member

Откуда: Москва
Сообщений: 5499
Блог
Nicola_r
Непонятно как обойти ограничение на размер результата в 8000 байт

Перейти на SQL2008
Nicola_r
Плюс разделитель туда не передать.
Дождаться SQL2008R2 :)
15 июн 09, 09:35    [7298618]     Ответить | Цитировать Сообщить модератору
 Re: Агрегатные функции MSSQL 2005  [new]
DeColo®es
Member

Откуда: Москва
Сообщений: 5499
Блог
Nicola_r
ЗЫ: все это прикольно, но сдается мне проще, быстрее, надежнее - по старинке, процедура и там через курсор конкатинировать строки :)
Можно FOR XML использовать...
Пока не перешли в основном проекте на 2008, так и делаем.
15 июн 09, 09:37    [7298625]     Ответить | Цитировать Сообщить модератору
 Re: Агрегатные функции MSSQL 2005  [new]
AAron
Member

Откуда: Москва
Сообщений: 4324
DeColo®es

Nicola_r
Плюс разделитель туда не передать.
Дождаться SQL2008R2 :)

а разве нельзя написать так
select concat(tbl.str+@delim) from tbl
и спокойно передавать разделитель, есть небольшое "но", но вариант ведь должен быть рабочим.
16 июн 09, 00:36    [7302903]     Ответить | Цитировать Сообщить модератору
 Re: Агрегатные функции MSSQL 2005  [new]
DeColo®es
Member

Откуда: Москва
Сообщений: 5499
Блог
AAron
а разве нельзя написать так
select concat(tbl.str+@delim) from tbl
и спокойно передавать разделитель, есть небольшое "но", но вариант ведь должен быть рабочим.
Можно, но операции по отсечению последнего знака во-первых, не бесплатные для процессора, во-вторых - загромождают код, а в третьих - несолидно как-то... ;)
16 июн 09, 09:38    [7303368]     Ответить | Цитировать Сообщить модератору
 Re: Агрегатные функции MSSQL 2005  [new]
Aleksey-K
Member

Откуда: Москва
Сообщений: 3116
Тема подымалась мною тут https://www.sql.ru/forum/actualthread.aspx?tid=667855
Но... решения нет для изменения разделителя.
С уважением, Алексей.
16 июн 09, 10:26    [7303520]     Ответить | Цитировать Сообщить модератору
 Re: Агрегатные функции MSSQL 2005  [new]
DeColo®es
Member

Откуда: Москва
Сообщений: 5499
Блог
Ну уж и нет... :)
Самый простой вариант - пишем свою функцию, в качестве разделителя используем char(7), потом его меняем на любую нужную последовательность символов.
16 июн 09, 10:51    [7303656]     Ответить | Цитировать Сообщить модератору
 Re: Агрегатные функции MSSQL 2005  [new]
AAron
Member

Откуда: Москва
Сообщений: 4324
DeColo®es
AAron
а разве нельзя написать так
select concat(tbl.str+@delim) from tbl
и спокойно передавать разделитель, есть небольшое "но", но вариант ведь должен быть рабочим.
Можно, но операции по отсечению последнего знака во-первых, не бесплатные для процессора, во-вторых - загромождают код, а в третьих - несолидно как-то... ;)

начнем с "несолидно", а остальное отбросим. как явную профанацию
редко приходится делать группировки строк такого объема, гда отрезание одного символа сколько-нибудь ресурсоемкая операция.
17 июн 09, 00:00    [7307776]     Ответить | Цитировать Сообщить модератору
 Re: Агрегатные функции MSSQL 2005  [new]
DeColo®es
Member

Откуда: Москва
Сообщений: 5499
Блог
Если группировка "простая", в одну переменную - проблем нет.
А вот если в каком -нибудь сложном запросе с group by.... :(
Недавно делал выборку из xml, где нужно было номера нод в dom группировать в зависимости от типа элемента - вот веселье было, особенно с учетом, что в этом проекте на 2008 не перешли, а 4К строк элементарно нехватало, максимум 800 элементов черех обычный CLR агрегат пролазило.
А запрос этот в системе выполняется на каждый чих - вот сиди и думай, как сервер отреагирует на лишний left(... len()-1)...
17 июн 09, 01:15    [7307914]     Ответить | Цитировать Сообщить модератору
 Re: Агрегатные функции MSSQL 2005  [new]
Anddros
Member

Откуда:
Сообщений: 1077
DeColo®es
А запрос этот в системе выполняется на каждый чих - вот сиди и думай, как сервер отреагирует на лишний left(... len()-1)...

left(... len()-1)... при минимальном изменении в собираемой строке очень просто заменить на substring(...,2,8000). Мелочь, а приятно. :)
17 июн 09, 01:56    [7307936]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить