Stored procedures SSRS采用了错误的列数据类型

Stored procedures SSRS采用了错误的列数据类型,stored-procedures,reporting-services,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'

我有一个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。我不在存储过程中进行任何类型转换。在SQLServerStudio中执行存储过程可以正常工作。在查询设计器中,我用存储过程的代码替换了存储过程调用,它也可以正常工作。将其切换回调用存储过程会引发相同的错误


为什么SSRS试图将varchar转换为int?如果有的话,它应该是一个double,或者干脆别管它,根本不要尝试对它进行类型转换。

我在查询设计器中运行它时查看了技术细节,发现错误源于存储过程,根本不涉及SSR。当我第一次测试存储过程时,我测试的是生产版本,而不是开发版本。我用来测试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,导致抛出错误一样。

在查询设计器中运行时,我查看了技术细节,发现错误源于存储过程,而不是完全涉及SSR。当我第一次测试存储过程时,我测试的是生产版本,而不是开发版本。我用来测试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,从而引发错误。

这是一个奇数。在Visual Studio中使用设计器时是否会发生此错误?我以前见过一些奇怪的行为,尽管通常是试图确定字段名,但在实际服务上运行时,这些行为永远不会出现。我唯一能想到的另一件事是,如果在Visual Studio和SSRS reporting server中的文本框的“Format”属性中应用任何类型的值。这就是它引起我注意的原因。试着看看报告背后的XML。字段类型包含在数据集中,但未显示在设计器中。也许它以某种方式被标记为一个整数(比如在最初开发报表时,它是一个整数,但在更新存储过程后现在是一个varchar)。@MartinSoles rd:TypeName是System.Int32。将其更改为System.String没有任何作用。这与我正在使用的版本有关。我们的prod服务器使用的是2008年,我们的dev one使用的是2010年,我使用的是2013年,而我从prod上取下了工作版本,它给出了相同的错误。我不确定在这一提示之后我能帮上多少忙。我目前无法访问您正在使用的特定版本的SSR(我们现在在两台不同的机器上运行2005和2012)。这很奇怪。在Visual Studio中使用设计器时是否会发生此错误?我以前见过一些奇怪的行为,尽管通常是试图确定字段名,但在实际服务上运行时,这些行为永远不会出现。我唯一能想到的另一件事是,如果在Visual Studio和SSRS reporting server中的文本框的“Format”属性中应用任何类型的值。这就是它引起我注意的原因。试着看看报告背后的XML。字段类型包含在数据集中,但未显示在设计器中。也许它以某种方式被标记为一个整数(比如在最初开发报表时,它是一个整数,但在更新存储过程后现在是一个varchar)。@MartinSoles rd:TypeName是System.Int32。将其更改为System.String没有任何作用。这与我正在使用的版本有关。我们的prod服务器使用的是2008年,我们的dev one使用的是2010年,我使用的是2013年,而我从prod上取下了工作版本,它给出了相同的错误。我不确定在这一提示之后我能帮上多少忙。我目前无法访问您正在使用的特定版本的SSR(我们现在在两台不同的机器上运行2005年和2012年)。这绝对是一个令人头痛的问题。我很高兴你能弄明白。那绝对是一个令人头痛的问题。我很高兴你明白了。