属性与参数数据类型一致时出现字符串转日期/时间转换失败报错如何解决
报错根因
你的代码存在两处错误触发了类型转换失败:
- 给
datetime类型的变量@BeginDate赋值了字符串常量'BeginDate',SQL Server无法将普通文本BeginDate转换为合法的日期时间格式 - WHERE过滤条件中直接使用字符串常量
'BeginDate'和日期类型的ProcessStart字段做比较,同样会触发非法类型转换尝试
修正方案
方案1:直接引用报表参数(最简写法)
SSRS数据集查询中可以直接调用已配置的报表参数,不需要额外声明变量,代码简化为:
SELECT * FROM MessageDeliveries AS MD WHERE MD.ProcessStart >= @BeginDate
方案2:保留自定义变量的写法
如果确实需要先把参数值赋值给自定义变量使用,引用报表参数时不要加单引号,修正后代码如下:
DECLARE @BeginDate datetime -- 直接引用报表参数,不需要加单引号,@BeginDate为你配置的报表参数名 SET @BeginDate = @BeginDate SELECT * FROM MessageDeliveries AS MD WHERE MD.ProcessStart >= @BeginDate
注意:如果你的报表参数名和自定义变量名重名,建议调整自定义变量名避免歧义,比如改成
@QueryBeginDate,防止变量作用域冲突。
内容的提问来源于stack exchange,提问作者Jeff Gilmore
相关产品推荐
相关产品推荐

