У меня есть хранимая процедура на основе Visual Studio, которая генерирует отчет для ежемесячного процесса аудита. В запрошенной базе данных все данные за каждый месяц живут в отдельной таблице (Contacts_month_1, Contacts_month_2 и т. Д.)Проблема с набором результатов из генерации отчета хранимой процедуры
SQL, используемый в генерации этого отчета, включает в себя некоторую небольшую логику, позволяющую ей работать динамически, а чем использовать жестко закодированные даты. Проблема возникла в начале января 2017 года, когда я начал получать не только результаты за предыдущий месяц, но и в предыдущий год. Чтобы быть конкретным, отчет аудита за декабрь 2016 года включал данные как для 12/2016, так и 12/2015. Первоначально я думал, что это был случайный случай, основанный на повороте года, и на данный момент у нас не было этого автоматизированного процесса. К сожалению, когда я пришел в офис сегодня, в выходной файл за январь 2017 года, я также получил результаты за январь 2016 года.
Я попытался включить проверку года в процесс, однако я все равно получаю тот же результат вывод. Любые идеи были бы хорошы.
Declare @GetMonth TinyInt
,@SessionTable varchar(50)
,@ContactTable varchar(50)
,@TableVersion varchar(2)
Declare @GetYear SmallInt
,@SessionTable_year varchar(50)
,@ContactTable_year varchar(50)
,@TableVersion_year varchar(4)
Set @GetMonth=MONTH(cast(GetDate() as Datetime))-1
Set @GetYear=YEAR(cast(GetDate() as Datetime))
If (@getmonth=0) Set @GetMonth=12 + (@GetYear-1)
Set @TableVersion=CAST(@getMonth as varchar(2))
Set @SessionTable='[CentralDWH].[dbo].[Sessions_month_' [email protected] +']'
Set @ContactTable ='[CentralDWH].[dbo].[Contacts_month_' [email protected] +']'
-- Select @GetMonth,@GetYear (DEBUGGING STATEMENT)
-- Select @SessionTable,@ContactTable (DEBUGGING STATEMENT)
Exec('SELECT [PBX_id] as AgentID
,[p22_value] as Skill
,''Athens'' as Location
,Convert(varchar(20),c.[local_start_time],120) as local_start_time
,convert(varchar(20),c.[local_end_time],120) as local_end_time
,U.[USER_NAME]
,call_id
FROM '[email protected] +' S
Inner join dbo.Users U on S.user_key=U.user_key
inner Join '+ @ContactTable+' C on S.contact_key=C.contact_key
Where is_screen > 0
And Unit_Num between 398003 and 398005
and P22_value is not null
and c.[local_start_time] > ' + @GetYear
+ ' order by local_start_time')
Это была моя идея, пытаясь определить изменение GetYear-1. Я отнюдь не опытный автор запросов, и я пытаюсь разделить все это на основе знаний, которых я не пытался реализовать за последние 4 года. Чем больше запутанного бита, если вы удалите все ссылки @GetYear, он все равно обеспечит данные в течение двух лет в наборе результатов. Я сделаю еще кое-что, чтобы понять, что я могу сделать. Я ценю ваше направление. –
В этом случае я предлагаю проверить ваши соединения и ваши условия в предложении WHERE, проблема должна быть где-то там. Рад, что я мог бы помочь и, пожалуйста, дайте мне знать, если вы найдете причину этого. – Cosmin