2

我正在将 access 2003 应用程序迁移到 access 2010。该应用程序使用 postgres odbc 驱动程序来访问其数据。

在访问 2010 时,它尝试使用 postgresql 服务器上的 IDENT_CURRENT 函数(如使用 wireshark 所示)来识别最近插入的行的 id ......不幸的是,据我所知 IDENT_CURRENT 不是 postgresql 支持的函数......

我正在使用带有 postgresql 8.3 数据库的最新 postgresql ODBC 驱动程序 (9.0)。

4

1 回答 1

1

使用currval是正确的方法(强调我的):

nextval返回当前会话中此序列最近获得的值。(如果nextval在此会话中从未为此序列调用过,则会报告错误。)因为这将返回一个会话本地值,所以它给出了一个可预测的答案,无论nextval自当前会话以来其他会话是否已执行。

将其包装在一个IDENT_CURRENT函数中是一种非常合理的移植技术。

您也可以RETURNING id在您的INSERT陈述中使用(再次强调我的):

可选RETURNING子句导致INSERT根据实际插入的每一行计算和返回值。这主要用于获取默认提供的值,例如序列号

这可能会更快更干净,但您仍然会遇到一些可移植性问题。OTOH,我认为无论您做什么,都会遇到可移植性问题。

于 2011-04-05T16:31:02.667 回答