从晶体报表到 SQL Server 存储过程的日期时间参数格式



我正在尝试使用需要两个datetime输入参数的 SQL Server 存储过程创建报表。但是,存储过程不接受在提示屏幕上选择的输入参数值,从而生成错误

"关键字转换附近的语法不正确"。

报表生成的SQL默认使用转换功能

EXECUTE [Projects_findings_summary_date]
CONVERT (DATETIME, '12/01/2017 00:00:00', 120),
CONVERT (DATETIME, '12/31/2017 12:59:59', 120) 
GO

此代码也在 SQL Server Management Studio 中生成了错误。但是如果我们去掉CONVERT函数,它可以正常工作。

EXECUTE [Projects_findings_summary_date]
'12/01/2017 00:00:00',
'12/31/2017 12:59:59'
GO

任何解决此问题的帮助将不胜感激。

我们最近升级到 Crystal Reports 2016 和 SQL Server 2014。

将变量传递给存储过程时不能使用转换/强制转换函数,但是在将变量传递给过程之前声明变量,对变量进行转换/强制转换,然后将变量传递给过程,如下所示:

Declare  @FromDate  DATETIME = CONVERT (Datetime,'12/01/2017 00:00:00', 120)
, @ToDate    DATETIME = CONVERT (Datetime,'12/31/2017 12:59:59', 120);
EXECUTE [Projects_findings_summary_date] @FromDate
, @ToDate
GO

注意

将字符串转换为DateTime值时,CONVERT函数中的第三个参数(样式)是多余的,DateTime 没有样式,它使用其标准格式(刻度)将数据存储在 SQL Server 中。

IN 水晶报告为命令键入以下内容

declare @datefrom as datetime = {?datefrom}  -- parameter in CR
declare @dateto as datetime = {?dateto}  -- parameter in CR
EXECUTE [Projects_findings_summary_date] @datefrom, @dateto
--@datefrom and @dateto are datetime variables

您无需转换

通过使用 SQL OLE DB 本机驱动程序而不是 SQL Server 的 OLE DB 提供程序Microsoft解决了此问题。转换现在不是由水晶报告生成的。

按照以下步骤解决了问题。

1.从链接安装"MS OLE DB 驱动程序"。

2.In 存储过程中,将输入参数的"日期时间"替换为"日期"。

3.In"晶体报告"中,建立新连接,选择"->OLE DB->"Microsoft OLE DB 驱动程序 对于 SQL"作为提供者。在"高级信息"选项卡中,设置"数据类型兼容性" = 80.

最新更新