为什么使用postgresql odbc驱动程序调用IDENT_CURRENT?

时间:2011-04-05 13:52:24

标签: ms-access postgresql odbc ms-access-2010

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

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

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

1 个答案:

答案 0 :(得分:1)

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

  

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

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

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

  

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

这可能会更快更清洁但你仍然有一些可移植性问题。 OTOH,我认为无论你做什么,你都会遇到便携性问题。