【发布时间】:2024-04-24 19:35:01
【问题描述】:
我正在 ReportServer 中创建一些报告(动态列表类型),其中之一是从 SQL Server 检索过去一周事件的信息。
在 SSMS 中,这很简单,我得到所需的信息(按时间)
... WHERE DATEPART(week, event_date) = DATEPART(week, DATEADD(d, -5, GETDATE()))
前面有一个
SET DATEFIRST 1;
声明,以便将星期一设置为一周的第一天。
很遗憾,ReportServer 不接受SET DATEFIRST 语句作为查询的一部分,因此在将其省略后,返回的数据范围是周日到周六,而不是周一到周日。我无法对数据库(或服务器,就此而言)进行全局更改。
我怎样才能解决这个问题?
【问题讨论】:
-
简单的答案是部署包含
SET DATEFIRST更改的存储过程。你能说服你的 DBA 允许这样做吗?请注意,SET DATEFIRST的范围仅限于当前会话,因此您可能还希望在更改之前保存@@DATEFIRST的值并在查询后恢复该值 - 否则您可能会影响其他查询重用相同的连接。 -
感谢@AlwaysLearning,但这是我的问题的一部分:除非它们真的与流程相关,否则我无法对数据库进行任何更改;恐怕报告不属于该类别
-
最好的办法可能是引入物理数字/日期表,在很多地方都很帅。 this example
标签: sql-server tsql reportserver