转换 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 错误时失败