在Postgres,我可以写
INSERT .. RETURNING *
检索插入期间生成的所有值。在Oracle,HSQLDB中,我可以使用
String[] columnNames = ...
PreparedStatement stmt = connection.prepareStatement(sql, columnNames);
// ...
stmt.execute();
stmt.getGeneratedKeys();
检索已生成的所有值。 MySQL有点受限,只返回设置为AUTO_INCREMENT
的列。但是如何使用Sybase SQL Anywhere完成此操作? JDBC驱动程序没有实现这些方法,并且没有INSERT .. RETURNING
子句,如Postgres中所示。有没有办法做到这一点,除了可能正在运行
SELECT @@identity
插入后立即?
答案 0 :(得分:1)
我当前的实现执行三个连续的SQL语句:
-- insert the data first
INSERT INTO .. VALUES (..)
-- get the generated identity value immediately afterwards
SELECT @@identity
-- get the remaining values from the record (possibly generated by a trigger)
SELECT * FROM .. WHERE ID = :previous_identity
如果仅请求ID
列,则可以省略第三个语句