我有一个CRecordSet(Visual C ++ 6.0),我正在使用ODBC连接到postgresql 8.0.8。
__
问题:我在一个带有序列号(自动增量)的表中插入一行,我想在插入后检索id。
我无法使用RETURNING关键字,此版本的PGsql不支持,但我可以使用currval('sequence')。
但是,在我的代码中,我需要执行默认查询,然后覆盖它以使用currval()执行查询。
根据我的理解,我只能通过再次调用CRecordSet :: Open()覆盖查询,这将创建一个新会话,使currval()无效。
__
那么:我如何覆盖SQL,然后通过Requery()而不是Open()执行这个新查询?
答案 0 :(得分:1)
据我所知,currval()不是特定于连接的。您应该在新连接上获得正确的值。您还可以尝试在INSERT语句的末尾附加'select currval()'。
INSERT INTO mytable VALUES (1); SELECT currval('mysequence');
答案 1 :(得分:0)
使用currval()。这是特定于会话和并发安全的。语法在Imraan Parker的回答中。
事实上,新会话无法获得此信息。