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

Откуда:
Сообщений: 1069
Коллеги, есть несколько глупых вопросов по хранимым процедурам, помогите!
1. Существует ли способ узнать параметры возвращаемого хранимой процедурой набора данных без запуска хранимой процедуры? Т.е. наименование, тип и порядок возвращаемых столбцов.
1а. Для параметров хранимой процедуры, как я понимаю, такой способ заведомо есть. Они должны, наверное, быть где то в sys.objects. Или я ошибаюсь?
2. Существует ли способ сохранить возвращаемые процедурой данные в xml? Не переписать хранимку, а переформатировать у готовой процедуры result set в xml и уже его присвоить переменной или сохранить в таблицу.
По exec ... RESULT SETS (as for xml) не могу найти примера категорически. И сам не могу победить. И вообще, оно вроде не для этого?
Пока не смог ничего другого придумать, как сделать запускач-обертку.
Хранимую процедуру, которая принимает параметр имя sp, набор входных параметров в виде имя - значение в xml, и описание выходных в виде название - тип, тоже в хмл.
А внутри создаю с помощью динамического sql временную таблицу, рисую опять же динамически insert ... Exec в эту временную таблицу, а потом делаю из нее select * from... for xml raw

Но куча ограничений, и куча ручной работы.
И вообще, мне кажется я перемудрил.

Помогите, а?
11 июл 15, 00:11    [17879486]     Ответить | Цитировать Сообщить модератору
 Re: Чайниковские вопросы по хранимым процедурам  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31984
uaggster
1. Существует ли способ узнать параметры возвращаемого хранимой процедурой набора данных без запуска хранимой процедуры? Т.е. наименование, тип и порядок возвращаемых столбцов.
1а. Для параметров хранимой процедуры, как я понимаю, такой способ заведомо есть. Они должны, наверное, быть где то в sys.objects. Или я ошибаюсь?
2. Существует ли способ сохранить возвращаемые процедурой данные в xml? Не переписать хранимку, а переформатировать у готовой процедуры result set в xml и уже его присвоить переменной или сохранить в таблицу.
1 - нет, в общем случае
1а - sys.parameters
2 - нет, в общем случае
uaggster
И вообще, мне кажется я перемудрил.
Задача то какая?
11 июл 15, 00:28    [17879533]     Ответить | Цитировать Сообщить модератору
 Re: Чайниковские вопросы по хранимым процедурам  [new]
Balbidon
Member

Откуда: Donetsk->Emerald City
Сообщений: 358
1. SET FMTONLY ON - в некоторых случаях может помочь, нет? Начиная с 2014 есть еще sys.dm_exec_describe_first_result_set
1a. sys.parameters
2. Похоже, обертка является единственным выходом
11 июл 15, 02:40    [17879640]     Ответить | Цитировать Сообщить модератору
 Re: Чайниковские вопросы по хранимым процедурам  [new]
Диклевич Александр
Member

Откуда:
Сообщений: 612
Balbidon
1. ... Начиная с 2014 есть еще sys.dm_exec_describe_first_result_set


Вообще-то, начиная с 2012 есть.
11 июл 15, 08:11    [17879706]     Ответить | Цитировать Сообщить модератору
 Re: Чайниковские вопросы по хранимым процедурам  [new]
uaggster
Member

Откуда:
Сообщений: 1069
alexeyvg,
Задача следующая: есть куча унаследованных хранимых процедур, которые к тому же довольно долго выполняются (десятки секунд-минуты). Кроме того, разработчики время от времени пишут новые.
По сути, это отчеты. И они, ну... Полустатические, что ли. Т.е. их можно делать, например, по состоянию на каждый час. А если пользователю приспичит - пусть ждет пока выполнится.

Идея была радикально ускорить вывод этих данних следующим образом:
1. Создаем на сервере некую очередь из этих хранимых процедур. Возможно, просто таблицу название - параметры.
2. Создаем job, который будет запускать процедуры из этого пула по очереди, и пишет их вывод в таблицу процедура - дата - параметры - результат (параметры - результат - в хмл, конечно).
3. Дальше вэб-приложение уже лезет в эту таблицу за нужным отчетом (и как результат - обновляется мгновенно).
3а. Собственно, получается легко реализовать и асинхронную доставку результатов.

Проблем несколько: регистрация процедуры в таком джобе (т.е. занесение в таблицу для последующего запуска) простая, но ручная работа (нудная и чреватая ошибками),
Как, собственно, получать то этот вывод в хмл и записывать в таблицу???
И, наконец, как решить вопрос с параллельным исполнением процедур в пуле? (Пока думаю создать 4-8 джобов, которые запускали бы каждую 4, например, процедуру, ну, один 1,5,9, второй - 2,6,10 и т.д.)
11 июл 15, 08:48    [17879729]     Ответить | Цитировать Сообщить модератору
 Re: Чайниковские вопросы по хранимым процедурам  [new]
invm
Member

Откуда: Москва
Сообщений: 9838
uaggster
Идея была радикально ускорить вывод этих данних следующим образом:
1. Создаем на сервере некую очередь из этих хранимых процедур. Возможно, просто таблицу название - параметры.
2. Создаем job, который будет запускать процедуры из этого пула по очереди, и пишет их вывод в таблицу процедура - дата - параметры - результат (параметры - результат - в хмл, конечно).
Для решения таких задач придумали Service Broker.
uaggster
2. Существует ли способ сохранить возвращаемые процедурой данные в xml? Не переписать хранимку, а переформатировать у готовой процедуры result set в xml и уже его присвоить переменной или сохранить в таблицу.
Отдаю на растерзание - 14086351
11 июл 15, 09:52    [17879779]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить