Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 从Crystal Reports到SQL Server存储过程的日期时间参数格式_Sql Server_Tsql_Crystal Reports_Sql Server 2014 - Fatal编程技术网

Sql server 从Crystal Reports到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

我正在尝试使用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: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。您不需要转换