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

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

Такая ситуация: имеются 3 хранимых процедуры (SP1, SP2, SP3). Они возвращают такие колонки:

SP1: a,b,c
SP2: d,e,
SP3: f,g,h

Выполняем ХП таким образом:

"EXEC " + <имя процедуры>
Имеется также таблица "Temp" с хардкордными колонками ("ID", "Value")

Пользователь вводит 2 имени колонок, которые он хочет получить после выполнения хранимки (не все колонки, а только 2), которые будут браться из результата выполнения хранимки и помещаться в таблицу " Temp"

Нужно сделать вот что: Вне зависимости от того, какая процедура выполняется, организовать следующее: Из результата выполнения хранимки необходимо выбрать только те колонки, которые ввел пользователь и поместить их в таблицу Temp.

Помогите, пожалуйста, алгоритм решения найти. Спасибо
20 янв 14, 18:07    [15442718]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL 2008: динамический запрос  [new]
Glory
Member

Откуда:
Сообщений: 104751
LeonardBertone
Помогите, пожалуйста, алгоритм решения найти.

Берете и переписываете SP1, SP2 и SP3. Чтобы они обрабатывали "Пользователь вводит 2 имени колонок," и возвращали нужный результат
20 янв 14, 18:35    [15442872]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL 2008: динамический запрос  [new]
LeonardBertone
Member

Откуда:
Сообщений: 4
Glory,

к сожалению это невозможно, ХП должны оставаться нетронутыми, т.к. в других местах, где они используются, нужны все колонки, и к тому же в моем случае хранимок не 3 а 300.

Есть другие способы?
20 янв 14, 18:38    [15442888]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL 2008: динамический запрос  [new]
Кот Матроскин
Member

Откуда: Москва
Сообщений: 8933
заводите для каждой процедуры по таблице, повторяющей структуру resultSet-а, заменяете
EXEC + ИмяПроцедуры на
Insert + ИмяТаблицы exec + ИмяПроцедуры.

После чего динамическим SQL перекладываете нужные колонки из соответствующей таблицы в Вашу temp.

P.S. Если внутри процедур уже используется конструкция Insert ... exec - способ не заработает.
20 янв 14, 18:40    [15442895]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL 2008: динамический запрос  [new]
LeonardBertone
Member

Откуда:
Сообщений: 4
Кот Матроскин
заводите для каждой процедуры по таблице, повторяющей структуру resultSet-а, заменяете
EXEC + ИмяПроцедуры на
Insert + ИмяТаблицы exec + ИмяПроцедуры.

После чего динамическим SQL перекладываете нужные колонки из соответствующей таблицы в Вашу temp.

P.S. Если внутри процедур уже используется конструкция Insert ... exec - способ не заработает.


Интересное предложение, спасибо
а средствами MSSQL это можно сделать?

ведь по сути, у нас есть 1 выборка 1 таблица, в которую нужно поместить выборку.
может можно курсором пройти как-то выборку?
20 янв 14, 18:53    [15442968]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить