避免重复导入更新的 excel-sheets。唯一索引最多只能容纳 10 个字段

Avoid duplicates on import of updated excel-sheets. Unique-Index can only hold 10 fields max

我面临以下情况:

我导入一个Excel-Sheet,然后修改了一些列(例如"comments") 一段时间后,我会收到更新的 Excel-Sheet,其中包含旧 Excel-sheet 和新记录的记录。 我不想导入数据库中已经存在的记录。

循序渐进:

初始Excel-sheet

col1  col2  comments
A        A       
A        B

导入后,部分字段会被操纵

col1  col2       comments
A        A       looks good
A        B       fine with me

然后我收到 excel sheet 更新

col1  col2  comments
A        A       
A        B
A        C

在这个更新步骤之后,数据库应该看起来像

col1  col2       comments
A        A       looks good
A        B       fine with me
A        C

我打算简单地在所有不会被操纵的字段上创建一个唯一索引,因此只会导入新记录。 (比如

ALTER TABLE tbl ADD CONSRAINT unique_key UNIQUE (col1,col2)

我现在的问题是 Access 以某种方式只允许最大的复合索引。 10 个字段。我的 table 都有大约 11-20 列...

我也许可以将更新后的 xls 导入临时文件。 table,然后 s.th 喜欢

INSERT INTO tbl_old SELECT col1,col2, "" FROM tbl_new WHERE (col1,col2) NOT IN (SELECT col1,col2 FROM tbl_old UNION SELECT col1,col2 FROM tbl_new)

但我想知道是否有更直接的方法...

有什么解决办法吗?

考虑到您将使用 SQL 方法:

INSERT INTO table_old (col1, col2)
SELECT col1, col2 FROM table_new
EXCEPT
SELECT col1, col2 FROM table_old

:)

它会在 comments 列中插入 null。使用这个:

INSERT INTO table_old 
SELECT * FROM table_new
EXCEPT
SELECT * FROM table_old

避免空值。此外,两个 tables 必须具有相同数量的列。对于 Oracle,使用 minus 而不是 except。等效的 SQL 查询将使用 LEFT OUTER JOIN.

进行
INSERT INTO table_old (col1 , col2)
    SELECT N.col1, N.col2
    FROM   table_new N
    LEFT OUTER JOIN table_old O ON O.col2 = N.col2
    WHERE O.col2 IS NULL

这也将为 comments 列提供 null 值,因为我们只插入 col1 和 col2。所有插入都在提供的 table 个示例上进行了测试。

我只想将 PK ID 列放在那些 table 中。

尝试 EXISTS 条件:

INSERT INTO tbl_old (col1, col2, comments)
SELECT col1, col2, Null 
FROM tbl_new
WHERE NOT EXISTS (SELECT col1, col2 FROM tbl_old WHERE tbl_old.col1 = tbl_new.col1 AND tbl_old.col2 = tbl_new.col2);