我目前正在Pervasive创建我的第一个真实生活项目。任务是将包含订单的某个XML结构(如商店和产品)映射到我自己创建的3个表。这些表位于MS-SQL-Server实例中。
所有表都有一个名为“id”的唯一键,一个自动递增的列。我已从所有映射中删除此列,以便Pervasive不会尝试自行填充它。
对于某些计算,对于其中一个表中的拆分键以及对其他表中创建的记录的引用,我将需要数据库刚刚创建的id。为此,我搜索了答案。我可以用“select @@ identity;”作为语句,这将返回最近为当前连接创建的id。这意味着在Pervasive中,我将不得不使用已经存在的目标连接对象来执行此语句。
但是怎么做?我很确定我需要一个JDImport或DJExport对象,但如何获得Pervasive插入记录的当前连接?
当我需要在其他表中引用id时,还有其他方法来处理这种自动增量吗?
答案 0 :(得分:0)
不确定Pervasive中的工作原理,但您可能会遇到@@ identity的问题。 Scope_identity()可能更安全,但在Pervasive中可能仍然不起作用。
希望您的表格除了生成的ID之外还有一个自然键,在这种情况下,您可以根据自然键选择您的ID。这将避免您在不同会话和范围内遇到的任何问题。
答案 1 :(得分:0)
如果有人看到这篇文章并想知道答案,那就是“你不能”。 Pervasive不允许访问他们自己的连接对象,即用于查询数据库的连接对象。无法访问它,您无法保证获取正确的ID。我们的解决方案是这样的:我们使用了一个存储过程,我们在Before-Transformation事件中调用它创建了头记录,并将id和一个可选的错误消息作为表返回。我们执行它并返回我们随后保存并在整个映射中使用的id。