You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:41:30