插入记录时将nvarchar转换为数字时出错

时间:2019-01-03 10:42:09

标签: sql-server

早安, 我试图将记录从csv文件插入到我的数据库表中。问题在于插入字母数字值。 我的列数据类型设置为NUMERIC(19,0),我希望在此列中插入一些数字值。由于某些特定原因,我在csv文件中获取了字母数字值。例如: 我正在获得价值:GBS1182000945008。 我的目标是删除这三个字符,并将剩下的字符串转换为数字,并将其插入到我的表中。

到目前为止,我已经尝试过:

CAST((select substring(?,4,30)) AS NUMERIC)  

但是,我仍然遇到这个烦人的错误,我不能只使用TRY_CONVERT来忽略这些值,因为我确实需要数据库中的那些记录。我在这里想念什么?

编辑:我已经分别测试了此代码,它按预期工作,唯一的问题是在插入值时使用它。我所做的是,我检查了给定的参数是否为数字,如果是,则只是插入参数,否则将参数转换为数字。

这就是我的整个情况:

If (SELECT ISNUMERIC(?)) = 1 {
     // Just insert the parameter as:
     Insert INTO table (NUMERIC_FIELD) VALUE(?)
}
ELSE {
  Insert INTO table (NUMERIC_FIELD) VALUE(CAST((select substring(?,4,30)) AS NUMERIC))
}

在这里?代表CSV中的值。

1 个答案:

答案 0 :(得分:0)

尝试用AS NUMERIC(19,0)代替AS NUMERIC

另外,请注意,提取的子字符串中可以包含30位数字(它不适合列数据类型的19 digis。