sql-server - ColdFusion错误将数据类型十进制转换为十进制
问题描述
我在 CFStoredProc 中有一个错误,每当我尝试将十进制值发送到存储过程时,它都会导致崩溃。该过程只是将值插入到 SQL 表中的十进制 (4,2) 列中。如果我将一个十进制值硬编码为 cfprocparam 的值,则该过程有效。但是,如果从文件中读取该值,无论我如何确保数字格式正确,我总是会收到错误“将数据类型十进制转换为十进制时出错”。谁能看到我在这里做错了什么?
我的代码基本上执行以下操作:
- 读取 CSV 文件并将其转换为查询
- 循环查询以将 CSV 数据读入变量
- 将这些变量作为 cfprocparams 发送到存储过程
我试过了:
- 在将数字发送到存储过程之前使用 numberFormat() 格式化数字
- 在将数字发送到存储过程之前使用 decimalFormat() 格式化数字
- 使用自定义函数格式化数字,该函数在我们的应用程序的其他地方执行相同的操作
- 使用 cfprocparam 的“值”部分中的上述函数格式化数字
我尝试过的代码示例:
<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.
解决方案
事实证明,传递给存储过程的值对于插入它的列的数据类型来说太大了。数据类型是十进制(3,2),我传递的值超过三位数。
解决方案是检查传递给存储过程的数字的大小,如果值太大,则给用户一个错误。
感谢@Tomalak 的帮助!
推荐阅读
- sql-server - SQL Server 中处理 HMAC-SHA256 加密的函数?
- c++ - 为什么无限循环
- reactjs - 我的网络响应显示在控制台中,但不会保存到我的变量中
- ethereum - 如何让 MetaMask 使用相应的代币来显示余额?
- java - 将 LinkedList 元素与 Java 中的字符串进行比较
- combinations - N 个元素的 C 对组合数
- jquery - 使用 jQuery ajax 下载文件
- python - 将字典值转换为列表
- java - MIME-TYPE 异常 Main.css Spring Boot
- file - 如何使用 Node Red 从 http 直接链接下载文件?