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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nvarchar 值转换为数据类型为 int 发生语法错误相关的知识,希望对你有一定的参考价值。

参考技术A 其中DateTime字段的字段类型是nvarchar ,值如“2000.12.08”执行以后报错,错误如下:Microsoft OLE DB Provider for SQL Server (0x80040E07)将nvarchar 值 '如:19' 转换为数据类型为 int 的列时发生语法错误。用CAST ( expression AS data_type ) 及CONVERT (data_type[(length)], expression [, style])进行转换,均未成功!望解答,不胜感激! 补充: 1.一楼“小刚”SQL语句报错1)在SQL查询分析器中执行:select * from F_info where cast(left([DateTime],4) as int) > 2000 and cast(left([DateTime],4) as int) < 2009 order by [id] desc郁闷!郁闷!2.二楼“孤风”的SQL语句报错,1)改为select * from F_info where year(Convert(int, ([DateTime]), 121)) >= 2000 and year(Convert(int, ([DateTime]), 121)) <= 2009 order by [id] desc提示:将 nvarchar 值 '如:2000.12.08' 转换为数据类型为 int 的列时发生语法错误。2)改为select * from F_info where year(Convert(int, (left([DateTime],4)), 121)) >= 2000 and year(Convert(int, (left([DateTime],4)), 121)) <= 2009 order by [id] desc提示:将 nvarchar 值 '如:19' 转换为数据类型为 int 的列时发生语法错误。本回答被提问者采纳

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

【中文标题】转换 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 值转换为数据类型为 int 发生语法错误的主要内容,如果未能解决你的问题,请参考以下文章

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

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

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

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

在 SQL Server 2008 中将 NVARCHAR 转换为 INT 数据类型

将 nvarchar 转换为数据类型 int 时出错