Использование динамически создаваемых столбцов SQL Server в предложении where в SP, подключенном к SSRS
Мне нужно запустить хранимую процедуру, передав ее startDate
а также EndDate
параметры. Хранимая процедура создает PeriodColumns
динамически на основе этих параметров: 1 столбец за 3 месяца.
Примеры (дд / мм / гггг):
- дата начала: 01.01.2014
дата окончания: 01/12/2014
Колонки:
id Period0Status Period1Status Period2Status Period3Status 1 Active Waiting Passive Closed 2 Active Passive Active Completed
дата начала: 01.01.2014
- дата окончания: 01/06/2014
Колонки:
id Period0Status Period1Status 7 Active Completed 8 Active Waiting
Когда я пытаюсь выбрать запрос, как:
Select *
from myTable t
where t.Period2 = ...
это не позволяет мне, потому что в определении нет столбца Period2. Эти столбцы генерируются динамически, как сказано выше. Определение таблицы:
Create Table myTable (id int)
С другой стороны, запрос как
Select *
from myTable t
where Period2 = ...
как-то работает нормально, хотя Period2 подчеркнут красным в запросе. Однако проблема возникает, когда я подключаю эту хранимую процедуру к другому приложению, Microsoft SSRS 2008. Когда я нажимаю кнопку Обновить поля в свойствах DataSet, выдается сообщение об ошибке:
убедитесь, что вы можете подключиться к источнику данных и правильный синтаксис запроса
Я не могу определить фиксированные периоды в определении таблицы. Без определения их я не могу использовать их в WHERE
юридически - когда SQL Server подчеркивает это красным и говорит синтаксическую ошибку, хотя хранимая процедура работает, когда я использую ее в SSRS, она не работает и выдает указанную ошибку.
Как я мог решить эту проблему? Любая помощь будет так цениться!
1 ответ
В прошлом я делал так, чтобы хранимая процедура всегда генерировала одинаковое количество столбцов... каким бы ни было максимальное количество столбцов.
Если вам нужны только два столбца, верните первые два столбца с данными, а все остальные могут быть NULL.
Затем используйте свойство видимости в SSRS, чтобы скрыть все столбцы со значением NULL.