Вместо того, чтобы использовать отдельные процедуры для основной таблицы и для детализации, можно использовать одну общую процедуру и проверять значение столбца детализации.
ALTER proc [dbo].[sp_table_for_both]
@XmlParam xml = null,
@DrillDownField varchar(max) = null,
@DrillDownParams varchar(max) = null,
@UserID int
as
BEGIN
-- получение параметров фильтра виджета — периода и списка менеджеров
-- параметры фильтра передаются в @XmlParam
declare @StartDate date = (select cast(value as date) from dbo.fn_rep_params(@XmlParam) where name = 'StartDate')
declare @EndDate date = (select cast(value as date) from dbo.fn_rep_params(@XmlParam) where name = 'EndDate')
declare @ManagerIDs varchar(max) = (select cast(value as varchar) from dbo.fn_rep_params(@XmlParam) where name = 'Managers')
-- если это не детализация, а основная таблица
if nullif(@DrillDownField,'') is null begin
-- получение данных для основной таблицы
...
-- если это детализация по столбцу Факт
end else if @DrillDownField = 'fio' begin
-- получение значения параметра детализации
-- параметры детализации передаются в @DrillDownParams
declare @fio varchar(max) = (select cast(value as varchar) from dbo.fn_rep_params(@DrillDownParams) where name = 'fio')
-- получение детальных данных
...
end
...
END
Функция fn_rep_params возвращает значение параметра детализации.
|