0

我有一个 CRecordSet (Visual C++ 6.0),我正在使用 ODBC 连接到 postgresql 8.0.8。

__

问题:我将一行插入具有序列 ID(自动增量)的表中,并且我想在插入后检索该 ID。

我不能使用 RETURNING 关键字,这个版本的 PGsql 不支持,但我可以使用 currval('sequence')。

但是,在我的代码中,我需要执行默认查询,然后覆盖它以使用 currval() 执行查询。

据我了解,我只能通过再次调用 CRecordSet::Open() 来覆盖查询,这将创建一个新会话,从而使 currval() 无用。

__

那么:如何覆盖 SQL,然后通过 Requery() 而不是通过 Open() 执行这个新查询?

4

2 回答 2

1

As far as I understand, currval() is not connection specific. You should get the correct value back on the new connection. You could also try and append the 'select currval()' at the end of your INSERT statement.

INSERT INTO mytable VALUES (1); SELECT currval('mysequence');
于 2009-06-05T21:49:35.633 回答
0

使用 currval()。这是特定于会话且并发安全的。语法在 Imraan Parker 的回答中。

但事实是,对于新会话,没有安全的方法可以获取此信息。

于 2012-09-29T03:27:56.900 回答