Вот проблема.
У меня есть хранимая процедура, которая преобразует нормализованные данные в стандартный набор данных.
Мне нужно сообщить о некоторых данных, которые состоят из представления и двух данныхнаборы из хранимой процедуры с различными параметрами, передаваемыми в хранимую процедуру, которая возвращает разные столбцы.
Пример
Если My View содержит что-то вроде:
ID Title Status Date
1 How To Party Like a rockstar Approved 7/15/1989
2 Too much of a good thing Approved 7/25/2001
3 Needs More Cowbell Denied 11/11/2011
4 Here Today Gone Tommorrow Approved 8/13/1969
5 The way She moves Approved 12/13/2011
И процедура, запущенная с одним параметром, возвращает:
ID Do you like the ice Cream? How much would you pay for the ice cream?
1 Yes 2
2 Yes 5
3 Yes 7
4 No 2
5 No 3
И то же самоепроцедура, запущенная с другим параметром, возвращает:
ID Total Number of Bell Peppers Total Number of Apples Total Number of Oranges
1 7 6 6
2 6 8 8
3 32 7 5
4 7 3 1
5 12 1 1
Если предположить, что столбец идентификатора является ключом, который можно использовать для объединения наборов данных, как мне получить:
ID Title Status Date Do you like the ice Cream? How much would you pay for the ice cream? Total Number of Bell Peppers Total Number of Apples Total Number of Oranges
1 How To Party Like a rockstar Approved 7/15/1989 Yes 2 7 6 6
2 Too much of a good thing Approved 7/25/2001 Yes 5 6 8 8
3 Needs More Cowbell Denied 11/11/2011 Yes 7 32 7 5
4 Here Today Gone Tommorrow Approved 8/13/1969 No 2 7 3 1
5 The way She moves Approved 12/13/2011 No 3 12 1 1
Помня о том, что хранимые процедуры не могут быть выполнены с помощью встроенного SQL из-за характера нормализации и преобразования нормализации, и я не верю, что они могут быть выполнены как переменные таблицы udf из-за того, что хранимыеПроцедура возвращает переменное число столбцов в зависимости от параметра, который передается ей при запуске (если кто-то может доказать, что я ошибаюсь в этом, и указать мне в направлении динамического столбца с табличным значением udf, я был бы очень признателен)
Если я смогу каким-то образом привести представление и две хранимые процедуры в одну хранимую процедуру и вернуть набор данных в этом файлеАшион, это было бы моей конечной целью.
Я также должен отметить, что на этом сервере нельзя включить специальные распределенные запросы (не мое решение)
Разрешение
С небольшой помощью ответа Стюарта Эйнсворта я смог разобраться.Моей первоначальной проблемой было то, что столбцы были динамическими для каждой из таблиц кросс-таблицы.поэтому в качестве части этого я создал функцию, которая возвращает столбцы в виде строки с разделителями-запятыми ...
DECLARE
@PivotColumns VARCHAR(MAX)
SET @PivotColumns = dbo.fnGetFormPivotColumns(9)
Где 9 в этом случае - это параметр, который позволяет мне узнать, какой элемент яздание для.Оттуда это было просто повторение функциональности в базовом sp для динамического создания временных таблиц, поэтому я придумал следующее:
IF object_id('tempdb..#temp_DEP') IS NOT NULL
DROP TABLE #temp_DEP
CREATE TABLE #temp_DEP (APPLICATION_ID int)
EXEC ('ALTER TABLE #temp_DEP ADD ' + @PivotColumns)
INSERT INTO #temp_DEP
EXEC GetFormCrossTab 9
Простой SELECT * FROM #temp_DEP показывает, что я получаю именночто я хочу.
Все, что мне нужно сделать, это повторить процесс для другого параметра, и я получу два набора данных в одной хранимой процедуре.