将数据类型十进制转换为十进制的 ColdFusion 错误

ColdFusion Error converting data type decimal to decimal

我在 CFStoredProc 中遇到了一个错误,每当我尝试向存储过程发送十进制值时,它就会导致崩溃。该过程只是将值插入 SQL table 中的 decimal(4,2) 列。如果我将十进制值硬编码为 cfprocparam 的值,则该过程有效。但是,如果从文件中读入该值,无论我如何确保数字格式正确,我总是会收到错误“将数据类型十进制转换为十进制时出错”。谁能看出我在这里做错了什么?

我的代码主要执行以下操作:

  1. 读取 CSV 文件并将其转换为查询
  2. 循环查询以将 CSV 数据读入变量
  3. 将这些变量作为 cfprocparams 发送到存储过程

我试过:

  1. 在将数字发送到存储过程之前使用 numberFormat() 格式化数字
  2. 在将数字发送到存储过程之前使用 decimalFormat() 格式化数字
  3. 使用自定义函数格式化数字,该函数在我们的应用程序的其他地方做同样的事情
  4. 在 cfprocparam
  5. 的 'value' 部分使用上述函数格式化数字

我尝试过的代码示例:

<cfif structKeyExists(form, 'select_rHeight')>
     <cfset headerName = form['select_rHeight']>
     <cfset rHeight = csvQuery[headerName]>
     <cfset rHeight = numberFormat(rHeight, "__.00")>
</cfif>

<cfstoredproc procedure="name" datasource="name">
     <cfprocparam cfsqltype="CF_SQL_DECIMAL" dbvarname="@Height" scale="2" value=#rHeight# null="#NOT len(trim(rHeight))#" />
</cfstoredproc>

<cfif structKeyExists(form, 'select_rHeight')>
     <cfset headerName = form['select_rHeight']>
     <cfset rHeight = csvQuery[headerName]>
</cfif>

<cfstoredproc procedure="name" datasource="name">
     <cfprocparam cfsqltype="CF_SQL_DECIMAL" dbvarname="@Height" scale="2" value=#decimalFormat(rHeight)# null="#NOT len(trim(rHeight))#" />
</cfstoredproc>

在将变量发送到存储过程之前,我已经完成了变量的 cfdump 和输出,而且它的格式似乎总是正确的,但我总是收到此错误消息: [Macromedia][SQLServer JDBC Driver][SQLServer]Error converting data type decimal to decimal.

事实证明,传递给存储过程的值对于要插入的列的数据类型来说太大了。数据类型是 Decimal(3,2),我传递的值超过三位数。

解决方案是检查传递给存储过程的数字的大小,如果值太大则给用户一个错误。

感谢@Tomalak 的帮助!