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