SSRS假定列数据类型错误

时间:2015-11-02 18:35:28

标签: stored-procedures reporting-services

我有一个SSRS报告,它是根据给定2个变量的存储过程构建的。我收到的错误是

An error has occurred during report processing. (rsProcessingAborted)
Cannot read the next data row for the dataset Sheet2.     (rsErrorReadingNextDataRow)
Conversion failed when converting the varchar value '.5' to data type int.

这没有任何意义。有问题的变量存储为varchar。我没有在存储过程中进行任何类型转换。在sql server studio中执行存储过程工作正常。在查询设计器中,我只使用存储过程的代码替换了存储过程调用,它也可以正常工作。将其切换回来调用存储过程会引发相同的错误。

为什么SSRS尝试将varchar转换为int?它应该是双倍的,或者只是单独留下它,而不是试图对它进行类型化。

1 个答案:

答案 0 :(得分:0)

当我在查询设计器中运行它时,我查看了技术细节,发现错误源自存储过程而根本不涉及SSRS。当我第一次测试生产版本而不是开发版本时测试存储过程。用于在VS中测试报告的开发存储过程和包含该存储过程的数据库是开发数据库。 dev服务器显然也使用了dev数据库版本。

由于某种原因,这行代码打破了它

CASE WHEN TN_UNPLATED_BLANK.CN_ZZ_ANGLE_TOL_MINUTES = '-32767' THEN -999999
     ELSE TN_UNPLATED_BLANK.CN_ZZ_ANGLE_TOL_MINUTES END AS CN_ZZ_ANGLE_TOL_MINUTES,

将其更改为此修复

CASE WHEN TN_UNPLATED_BLANK.CN_ZZ_ANGLE_TOL_MINUTES = '-32767' THEN NULL
     ELSE TN_UNPLATED_BLANK.CN_ZZ_ANGLE_TOL_MINUTES END AS CN_ZZ_ANGLE_TOL_MINUTES,

好像else部分的返回类型强制字符串' -32767'转换为int然后强制.5转换为int转换为int导致错误被抛出。