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,
仍在学习史蒂夫
答案 0 :(得分:0)
您可以将副本拉出到单独的表格中
SELECT [Client ID], count(*)
FROM [Entity Client]
GROUP BY [Client ID]
HAVING count(*) > 1
ORDER BY [Client ID]
然后使用唯一ID重新添加行,最后删除重复的行