转换 nvarchar 值“7575932”时转换失败。数据类型 int

Posted

技术标签:

【中文标题】转换 nvarchar 值“7575932”时转换失败。数据类型 int【英文标题】:Conversion failed when converting the nvarchar value '7575932.' to data type int 【发布时间】:2016-04-21 10:02:26 【问题描述】:

我有这个开始失败的遗留代码......

UPDATE B2C 
SET B2C.dborderid = A.order_number__c
FROM b2csf B2C 
JOIN Alemania A ON B2C.actualid = A.salesforce_id 

我收到此错误:

消息 245,第 16 级,状态 1,第 1 行 将 nvarchar 值 '7201799-' 转换为数据类型 int 时转换失败。

我继续修改为:

UPDATE B2C 
SET B2C.dborderid = (CASE 
                        WHEN Isnumeric (a.order_number__c) = 1 
                           THEN CAST(a.order_number__c AS INT) 
                     END)
FROM b2csf B2C 
JOIN Alemania A ON B2C.actualid = A.salesforce_id 

现在我明白了

消息 245,第 16 级,状态 1,第 1 行 转换 nvarchar 值“7575932”时转换失败。数据类型为 int。

我现在的问题是:

如何避免此错误?例如,我不介意丢失“7575932”。值。(理想情况下,我想丢弃 '7575932.' 值)

我正在尽最大努力遵循最佳实践...将DBorderid 列更改为nvarchar 是唯一的“最佳实践”替代方案吗?

我使用的是 SQL Server 2008

【问题讨论】:

【参考方案1】:

... WHEN Isnumeric (a.order_number__c + '.0e0') = 1 ...代替... WHEN Isnumeric (a.order_number__c) = 1 ...

【讨论】:

效果很好,谢谢,现在我得到:Msg 248, Level 16, State 1, Line 2 nvarchar 值 '3545427103' 的转换溢出了一个 int 列。该语句已终止。是否有任何在线优雅/最佳实践解决方案? @Chicago1988 这个附加条件怎么样case when cast('3545427103' as numeric(38,0)) between -2147483648 and 2147483648 then ... 听起来不错,但坏数据会不断出现......所以它最终会再次失败......我不敢相信我无法为这个简单的事情找到解决方案......跨度> @Chicago1988 你试过 case inside case ...case when Isnumeric (a.order_number__c + '.0e0') = 1 then case when cast(a.order_number__c as numeric(38,0)) between -2147483648 and 2147483648 then ... 它会检查所有可能的选项

以上是关于转换 nvarchar 值“7575932”时转换失败。数据类型 int的主要内容,如果未能解决你的问题,请参考以下文章

System.Data.SqlClient.SqlException:“将 nvarchar 值 'STORES' 转换为数据类型 int 时转换失败。”

SQL 异常:将 nvarchar 值“[anyvalue]”转换为数据类型 int 时转换失败

org.hibernate.exception.SQLGrammarException:将 nvarchar 值“ViewWebApp”转换为数据类型 int 时转换失败

将 nvarchar 值转换为数据类型 int 和其他 SQL Server 错误时失败

SqlParameter在将 nvarchar 值 转换成数据类型 int 时失败

nvarchar 值转换为数据类型为 int 发生语法错误