Sql server 从Crystal Reports到SQL Server存储过程的日期时间参数格式
我正在尝试使用SQL Server存储过程创建报表,该存储过程需要两个Sql server 从Crystal Reports到SQL Server存储过程的日期时间参数格式,sql-server,tsql,crystal-reports,sql-server-2014,Sql Server,Tsql,Crystal Reports,Sql Server 2014,我正在尝试使用SQL Server存储过程创建报表,该存储过程需要两个datetime输入参数。但是,存储过程不接受在提示屏幕上选择的输入参数值,从而生成错误 “关键字转换附近的语法不正确” 报表生成的SQL默认使用Convert函数 EXECUTE [Projects_findings_summary_date] CONVERT (DATETIME, '12/01/2017 00:00:00', 120), CONVERT (DATETIME, '12/31/2017 12
datetime
输入参数。但是,存储过程不接受在提示屏幕上选择的输入参数值,从而生成错误
“关键字转换附近的语法不正确”
报表生成的SQL默认使用Convert函数
EXECUTE [Projects_findings_summary_date]
CONVERT (DATETIME, '12/01/2017 00:00:00', 120),
CONVERT (DATETIME, '12/31/2017 12:59:59', 120)
GO
这段代码也在SQLServerManagementStudio中生成了错误。但是如果我们去掉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 在Crystal Report as命令中键入以下命令
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
您不需要转换将变量传递给存储过程时,您不能使用convert/cast函数,但您可以在将变量传递给proc之前声明变量,对变量执行convert/cast,然后将变量传递给proc,如下所示:
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中存储数据 通过使用SQL OLE DB本机驱动程序而不是Microsoft OLE DB provider for SQL Server解决了此问题。Crystal report现在未生成Convert。通过以下步骤解决了问题
1.从链接安装“MS OLE DB驱动程序”
2.在存储过程中,将输入参数的“DateTime”替换为“Date”
3.在Crystal Report中,建立新连接,选择->OLE DB->“Microsoft OLE DB驱动程序”
作为提供程序。在“高级信息”选项卡中,设置“DataTypeCompatibility”=
80. SP根据时间戳过滤基础数据集。最终用户需要能够输入时间,以便在特定时间点查看记录。在下午3点之前,获取今天所有交易的交易清单。我们无法从参数中删除时间元素。我正在使用Crystal reports读取SP。连接报告时,会提示从日历中选择值。执行时,报告会自动生成带有CONVERT的代码并生成错误。我看到的解决方法是创建一个字符串报告级别变量,将值传递给SP,而不是直接用户输入。注意:您的注释是错误的。第三个参数(样式)告诉SQLServer如何将字符串转换为datetime。datetime确实没有显示格式(或样式),但它的字符串表示形式确实有样式。忽略样式参数可能会导致错误或错误最严重的日期。2017年1月12日是指1月12日还是12月1日?只有通过使用style参数,才能告诉SQL Server它是哪一个,在本例中,120是错误的值。它应该是101或103。您不需要转换