【发布时间】:2017-02-23 23:34:01
【问题描述】:
我有一个基于 Visual Studio 的存储过程,可为每月审计过程生成报告。在被查询的数据库中,每个月的所有数据都存在于它自己的单独表中(Contacts_month_1、Contacts_month_2 等)
此报告生成中使用的 SQL 包含一些次要逻辑,以使其能够动态工作,而不是使用硬编码日期。问题出现在 2017 年 1 月开始,当时我不仅开始收到上个月的结果,还收到上一年的结果。具体而言,2016 年 12 月的审计报告包括 2016 年 12 月和 2015 年 12 月的数据。最初,我认为这是基于年初的某种侥幸,我们还没有在转年期间进行这种自动化流程。不幸的是,当我今天进入办公室时,在 2017 年 1 月的输出文件中,我也收到了 2016 年 1 月的结果。
我尝试在流程中包含一年检查,但我仍然得到相同的结果输出。任何想法将不胜感激。
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_' +@tableversion +']'
Set @ContactTable ='[CentralDWH].[dbo].[Contacts_month_' +@tableversion +']'
-- 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 '+@SessionTable +' 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')
【问题讨论】:
标签: sql sql-server-2008