将nvarchar值'AAAR78509883'转换为数据类型int时转换失败

时间:2016-04-19 20:15:55

标签: sql sql-server casting type-conversion

我在其中一个从Access导入的表中有一个nvarchar列。我想改成一个int。要搬到新桌子。

原始查询:

insert into members_exams_answer
    select 
        ua.members_exams_id, ua.exams_questions_id, 
        ua.members_exams_answers_value, ua.members_exams_answers_timestamp
    from 
        members_exams as me 
    full join 
        UserAnswers1 as ua on me.members_exams_username = ua.members_exams_id
    full join 
        exams_questions as eq on eq.exams_questions_id = ua.exams_questions_id

这会引发错误:

  

将nvarchar值'AAAR78509883'转换为数据类型int时转换失败。

我累了:

select convert (int, UserAnswers1.members_exams_id)
from UserAnswers1

select cast(members_exams_id as integer) int_members_exams_id
from UserAnswers1 

select cast (members_exams_id as int)
from UserAnswers1

所有导致相同的错误

  

将nvarchar值'AAAR78509883'转换为数据类型int时转换失败。

2 个答案:

答案 0 :(得分:1)

显然,您正在尝试将字母数字数据转换为int并且无法完成。

查看您的数据为什么当它不能成为int时,为什么要坚持将它转换为int?为什么不把它作为nvarchar处理?

答案 1 :(得分:0)

您的问题可能是系统性的,因为所有数据都有一个前导的字母字符,您需要删除(并希望字母数字相同)

在这种情况下,使用子字符串去除alphas(这假定每个记录中的字母字符的名称编号)。或者使用varchar或nvarchar字段而不是int。如果领先字符的数量不同,或者它们可能是领先或尾随或其他组合,那么修复起来要比我们在互联网上描述的要复杂得多。

另一种可能性是你只是有一些不好的数据。在这种情况下,识别非数字的记录并修复它们,如果无法修复则将值清零。当您以不正确的数据类型存储数据时,这种情况经常发生。