将varchar值'd1'转换为数据类型int时转换失败

时间:2014-06-16 09:53:50

标签: c# asp.net sql

我在Varchar数据类型表中有一列。在此字段中插入数据之前,我使用此查询从表中检索最大值:

string max = g1.retrieve_val("select isnull(max(cast(substring(aid,3,(len(aid)-1)) as int)+1),1) from tbl_name");
max = "aid" + max;

然后使用insert query在此字段中输入数据。但在这样做时,我收到了这个错误:

  

转换varchar值时转换失败' d1'到数据类型int

请指导我如何纠正这个问题?难道我做错了什么?虽然我在其他表中使用了相同的方法,但我没有收到任何错误。但是在这种特殊情况下我得到了这个错误。

3 个答案:

答案 0 :(得分:1)

 select isnull(max(cast(substring(aid,4,1) as int)+1),1) from tbl_name

答案 1 :(得分:0)

我做错了吗?

是的,您正在尝试将varchar值d1转换为int。这将失败。

我该如何纠正这个问题?

如果您只是想忽略所有非整数行,则可以在转换为int之前将这些首先过滤掉。如果您的RDBMS支持LIKE子句中的字符类,您可以尝试:

WHERE substring(aid,3,(len(aid)-1))) NOT LIKE '%[^0-9]%'

否则,您必须决定如何对d1等值进行处理,并对其进行适当转换。

答案 2 :(得分:0)

cnx.cmd = new SqlCommand("INSERT INTO Usuario(id,nombre,apellido) VALUES((SELECT CONVERT(int,(SELECT ISNULL(MAX(id)+1,1) FROM Usuario))),'" + Nombre + "','" + Apellido + "')", cnx.cn);