使用Perl上的Access表的游标

时间:2013-08-21 00:03:49

标签: sql perl ms-access-2010

Perl 5.10 Access 2010

问候所有人,

我有一个关键字段不太正确的表,定义了AUTOINCREMENT但 NOT PRIMARY KEY。因此,具有重复键值的行已经进入表中。 我需要以编程方式清除重复的行,每行只留一行 键值,然后是唯一的。

假设行已按排序顺序排列,这样的事情应该可以完成:

DECLARE @prevClientId = "XXX";
DECLARE @currClientId = "XXX";
DECLARE csr CURSOR FOR SELECT [Client ID] FROM [Entity Client] FOR UPDATE;
OPEN csr;
FETCH csr INTO @currClientId;
DO {
  IF( @currClientId != @prevClientId) {
      @prevClientId = @currClientId; ) {
  } else {
      DELETE FROM [Entity Client] WHERE CURRENT OF csr;
  }
  FETCH csr INTO @currClientId;
} UNTIL SQLSTATE = '02000';
CLOSE csr;

这应该遍历每一行并删除其键值与前一行的键值匹配的每一行。

问题: 1 - MS Access是否允许使用游标? 如果是的话,如何在perl脚本中对此进行编码? 如果不是,那么如何逐步通过表格的每一行?这与简单地循环遍历$ sth-> fetchrow_arrayref的结果不同,因为在扫描完所有行后你在内存中处理结果。

有关如何以编程方式从Access表中删除重复行的任何其他建议将非常感激。

TIA,

仍在学习史蒂夫

1 个答案:

答案 0 :(得分:0)

您可以将副本拉出到单独的表格中

SELECT [Client ID], count(*)  
FROM [Entity Client]
GROUP BY [Client ID]
HAVING count(*) > 1
ORDER BY [Client ID]

然后使用唯一ID重新添加行,最后删除重复的行