1

在 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

插入后立即?

4

1 回答 1

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请求列

于 2011-09-04T11:11:10.543 回答