Crystal Reports日期时间参数适配SQL Server存储过程报错问题
解决SQL Server存储过程调用时的CONVERT语法错误问题
这个错误的核心原因是:当你给存储过程传递表达式(比如这里的CONVERT函数调用)作为参数时,SQL Server要求必须用括号来明确参数的范围,直接裸写表达式会让解析器误解语法逻辑,从而抛出语法错误。
给你两种快速修复的方案:
方案1:给参数表达式添加括号
最简单的修改方式就是把每个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 -- 或者把整个参数列表用括号包裹的写法 EXECUTE [Projects_findings_summary_date] ( CONVERT(DATETIME, '12/01/2017 00:00:00', 120), CONVERT(DATETIME, '12/31/2017 12:59:59', 120) ) GO
方案2:使用变量传递参数(更推荐,可读性更强)
如果报表工具支持的话,先把转换后的日期值存入变量,再传递给存储过程,这种方式不仅能避免语法问题,还方便后续调试和维护:
DECLARE @StartDate DATETIME, @EndDate DATETIME SET @StartDate = CONVERT(DATETIME, '12/01/2017 00:00:00', 120) SET @EndDate = CONVERT(DATETIME, '12/31/2017 12:59:59', 120) EXECUTE [Projects_findings_summary_date] @StartDate, @EndDate GO
顺便补充一句:如果你的参数是单纯的日期字面量(比如'2017-12-01'),直接传递不需要括号,但一旦涉及函数调用、计算这类表达式,就必须用括号来告诉SQL Server这是一个完整的参数值。
内容的提问来源于stack exchange,提问作者user455580
相关产品推荐
相关产品推荐

