【问题标题】:Use a report parameter instead of GETDATE in stored procedure在存储过程中使用报告参数而不是 GETDATE
【发布时间】:2013-09-14 20:26:16
【问题描述】:

我有一个保存为存储过程的 SQL 查询。根据今天的日期,我使用三个不同的存储过程返回 1、2 或 3 天。这使我的仪表板用户可以在比较统计数据时返回并跳过周末。这实际上有效。它查看今天的日期,如果是星期天,则返回 2 天,如果是星期一,则返回 3 天,否则返回 1 天。仪表板在报表生成器中创建。如果今天是星期天,下面显示了日期之间的日期(即跳过 2 天并返回到星期五,这是最后一个正常工作日)。这么多的背景。我现在面临的挑战是仪表板的用户希望报告中的 BeginDate 和 EndDate 日期选择器参数,因此我不能再使用这些硬编码的日期字符串,但必须将参数合并到其中。如何在下面显示“GETDATE()”的行中替换名为@BeginDate 的参数:

BETWEEN DATEADD(DAY, -2, DATEADD(DAY, DATEDIFF(DAY,0,GETDATE()), 0)) AND DATEADD(SECOND, -86401, DATEADD(DAY, DATEDIFF(DAY,0,GETDATE()),0))

根据最终用户选择的日期,然后使用三个存储过程之一。我想我可以以某种方式完成这项工作,但我无法弄清楚如何用用户输入的参数替换上面的 GETDATE() 。如果我只是用一个参数替换它,它会抛出一个错误。我确信有一种非常聪明的方法可以做到这一点。我还在找!!!

【问题讨论】:

  • 我没有关注。您是将 sql 编码到报告中还是调用存储过程?如果您在报告中使用内联 sql,那么 ssrs 会获取 sql 参数并为您的报告创建参数。 SP将是最好的路线。如果添加 DATEDIFF(DAY,0,@ReportDate...
  • 我正在从 SQL Server 调用存储过程

标签: sql-server stored-procedures reporting


【解决方案1】:

如果您将新参数传递到存储过程中:

BETWEEN DATEADD(DAY, -2, @BEGINDATE) AND DATEADD(SECOND, -86401, @BEGINDATE)

添加秒数似乎不必要地复杂:

>= DATEADD(DAY, -2, @BEGINDATE) and XXX < DATEADD(DAY, -1, @BEGINDATE)

【讨论】:

猜你喜欢
  • 2014-05-15
  • 1970-01-01
  • 2016-03-29
  • 1970-01-01
  • 1970-01-01
  • 2014-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多