2013-09-27 1 views
0

Я создал инструмент обновления в SSRS, который записывает данные отпуска в указанную базу данных. Это было создано с помощью хранимой процедуры вставки в качестве набора данных в отчете. Все работает отлично, пока я хочу только указать отдельные даты. В идеале, хотя мне нужно, чтобы это делало диапазон дат. У меня есть следующие столбцы, которые необходимы:Застрял на вставке SSRS, сохраненном proc

HolidayDate|StaffCode|HolidayType|FTE 

Я знаю, это было бы лучше всего сделать в .net или что-то подобное, но это немного вне моего набора навыков. Мне нужна многопараметрическая хранимая процедура, которая создаст запись для каждой даты на основе выбора диапазона дат в SSRS. Стандартный отчет SSRS был бы простым, простым BETWEEN @DATE AND @DATE Но я не могу понять, как это можно применить в моей настройке, и я расстраиваюсь.

Надеюсь, что я не был слишком расплывчатым.

ответ

0

Суть в том, что вам действительно нужно иметь возможность получать список дат между датой начала и окончания.

Держа это просто, скажем, у вас есть отчет параметры @StartDate, @EndDate и @StaffCode со значениями 01-Jan-2013, 05-Jan-2013 и персонала1 соответственно.

Ваш SP будет иметь три соответствующих параметра - на их основе мы можем построить список дней для этого StaffCode в SP.

Вот один из способов сделать это:

create procedure MySP 
(
    @StartDate date 
    , @EndDate date 
    , @StaffCode varchar(10) 
) as 

with dates as 
(
    select HolidayDate = @startDate 
    union all 
    select HolidayDate = dateadd(dd, 1, HolidayDate) 
    from dates 
    where dateadd(dd, 1, HolidayDate) <= @EndDate 
) 
insert into HolidayDates 
select HolidayDate, StaffCode = @StaffCode 
from dates; 

Так что это вставляет строку для каждой даты от @StartDate до @EndDate.

Это всего лишь один пример, и я использовал рекурсивный CTE, чтобы установить даты - если у вас есть таблица календаря или чисел, вы можете просто использовать это вместо этого; есть множество примеров.

Другой подход просто создать набор на основе с петлей на основе параметров даты:

create procedure MySP 
(
    @StartDate date 
    , @EndDate date 
    , @StaffCode varchar(10) 
) as 

declare @Dates table (HolidayDate date) 

while (@StartDate <= @EndDate) 
begin 

    insert into @Dates select @StartDate 
    select @StartDate = dateadd(dd, 1, @StartDate) 

end 

insert into HolidayDates 
select HolidayDate, StaffCode = @StaffCode 
from @Dates; 

Вы сами сказали, что это не идеальный рабочий процесс - SSRS не действительно ввода данных механизм, но нет причин, по которым вышеупомянутое не должно работать в большинстве случаев.

+0

Actaully, думая об этом, CTE будет работать, отчет может создавать базовые данные, а остальная часть хранимой процедуры может преобразовывать данные через CTE. Просто нужно выяснить CTE сейчас! будут публиковать как отдельные вопросы. Спасибо за вдохновение. – GPH

+0

Нет проблем! Если вам не нравится использовать CTE, вы можете получить свой список дат с циклом; см. выше. –

Смежные вопросы