【问题标题】:SQL Server, Getting All Mondays between two datesSQL Server,获取两个日期之间的所有星期一
【发布时间】:2016-10-20 04:50:17
【问题描述】:

使用另一个 question 的建议:

SSMS 中工作得非常好,但是当尝试将其用作查询来为SSRS 报告创建数据集时,我收到以下错误:

锚点和列中递归部分的类型不匹配 递归查询“CTE”的“dt”。

DateFromDateTo 字段是数据类型为 Date/Time 的参数,所以我不知道为什么它不起作用。

【问题讨论】:

  • DECLARE @DateFrom DateTime 的数据类型非常重要,确保在 SSRS 中你也这样做
  • 你能在数据集中添加你查询的确切代码吗?
  • 确切的代码是从链接的问题中提取的代码。

标签: sql-server reporting-services visual-studio-2015 sql-server-2012


【解决方案1】:

我建议这样,

首先,使用下面的 SQL 查询创建数据集

DECLARE @DateFrom DATE;
DECLARE @DateTo DATETIME;

DECLARE @DateCollection TABLE(DateValue DATETIME)
WHILE @DateFrom <= @DateTo
BEGIN
    INSERT INTO @DateCollection (DateValue)
    VALUES ( @DateFrom )
    SET @DateFrom = DATEADD(DAY, 1, @DateFrom)
END

SELECT DateValue FROM @DateCollection WHERE  DATEPART(weekday, Datevalue) = 2
  • 这里,2 表示星期一

因此,一旦创建了数据集,您就必须为您的报告手动添加两个参数。命名为@DateFrom 和@DateTo

现在,请手动添加两个参数检查下图,

然后,从数据集中删除这两个声明变量并忽略保存时显示的任何警报。

现在,运行并检查表数据。我检查了我的演示,它正在工作。

演示运行图像:

希望对您有所帮助!如果您需要更多帮助,请告诉我。

【讨论】:

  • 只做第一部分,不改变CTE风格,通过使用Declare函数保存,保存然后添加同名参数并重新保存似乎可以解决问题。看起来很挑剔!
  • 好的,感谢您的更新。如果对您有帮助,请标记为答案! :)
猜你喜欢
  • 1970-01-01
  • 2014-06-11
  • 2012-01-28
  • 2017-05-02
  • 1970-01-01
  • 1970-01-01
  • 2017-06-12
  • 1970-01-01
  • 2021-11-09
相关资源
最近更新 更多