You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ODBC操作SQL Anywhere插入数据后获取自增主键求助

在SQL Anywhere(ODBC)插入时同步获取自增主键的解决方案

嘿,刚好我对SQL Anywhere的ODBC操作熟得很,这个问题其实用它自带的RETURNING语法就能轻松解决,不用额外执行查询语句,完全可以在同一条插入语句里拿到主键值!

核心思路

SQL Anywhere支持在INSERT语句末尾加上RETURNING子句,直接返回你需要的自增主键列值,配合ODBC的ExecuteScalar()方法就能一次性完成插入+主键获取。

具体代码调整

把你原来的插入语句改成下面这样,记得把<你的主键列名>替换成实际的主键字段:

cmd_ex.CommandText = @"INSERT INTO tabla (numero1, numero2, numero3, numero4...numeroN) VALUES (?,?,?,?,?) RETURNING <你的主键列名>";

完整示例代码

给你写个更清晰的示例,假设主键列叫id:

// 初始化ODBC命令对象(假设你已经做好了连接等前置操作)
OdbcCommand cmd_ex = new OdbcCommand();
cmd_ex.Connection = yourOdbcConnection;

// 构造带RETURNING的插入语句
cmd_ex.CommandText = @"INSERT INTO tabla (numero1, numero2, numero3) VALUES (?, ?, ?) RETURNING id";

// 添加参数(根据你的实际字段类型调整)
cmd_ex.Parameters.AddWithValue("@numero1", 100);
cmd_ex.Parameters.AddWithValue("@numero2", 200);
cmd_ex.Parameters.AddWithValue("@numero3", 300);

// 执行语句并获取自增主键
int newPrimaryKey = Convert.ToInt32(cmd_ex.ExecuteScalar());
Console.WriteLine($"新插入记录的主键是:{newPrimaryKey}");

注意事项

  • 确保你的主键列确实设置了IDENTITY自增属性(SQL Anywhere里的自增列就是用IDENTITY定义的)。
  • 这个语法支持SQL Anywhere 12及以上版本,如果你用的是更老的版本,可以试试SELECT @@IDENTITY的方式,但需要在同一个连接事务里执行,不过RETURNING更可靠,推荐优先用它。
  • 执行时一定要用ExecuteScalar()而不是ExecuteNonQuery(),因为前者会返回查询结果(也就是主键值),后者只返回受影响的行数。

内容的提问来源于stack exchange,提问作者Pablo Tobar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:07:36