首页 > 解决方案 > 使用 SQL Server/ADO 替代 Index + Seek on Access/DAO

问题描述

我正在将 Excel 应用程序从本地 MS Access 后端(使用 DAO)转换为在 Azure 上运行的 SQL Server(使用 ADO)。

我使用 DAO 执行的一个常见任务是 index + seek 方法来扫描大量输入行(~10,000,并使用多字段索引),检查数据库中的匹配记录,并根据需要更新或添加新记录。在决定添加或更新时,Seek 方法的 NoMatch 属性非常有效。

这似乎使用 SQL Server 应该非常简单,但我似乎找不到一个好的解决方案来让我检查匹配、添加或更新以及使用多列索引。

将表下载到内存然后进行批量更新就可以了,但是 ADO 的 Find 方法似乎不如 index + seek 好,而且它不能使用多列。使用支持索引搜索的 ADO 提供程序连接到 SQL Server 也可以(Jet 4.0?),但我也找不到这样的示例。

我错过了一些明显的东西吗?检查和添加或更新大量行到 SQL Server 的最佳方法是什么?谢谢

编辑:这是我目前在 Access/DAO 中执行的操作的一个简单示例:

    Set rs = db.OpenRecordset("TableName", dbOpenTable)
    With rs
        .Index = "MultiFieldIndex"

        'Loop through the input data
        For i = 1 To 10000
            .Seek "=", Criteria1, Criteria2

            If Not .NoMatch Then
                'Found a match, just update specific fields
                !Field1 = a
                !Field2 = b

                Else
                'No match found, add a new record then populate
                .AddNew
                !Field3 = c
                !Field4 = d

            End If

            .Update
        Next i
    End With

仅使用 SQL 执行此类操作的最佳方法是什么?我仍然可能会从加载完整目标表的断开连接的记录集开始,但是当我不知道是否需要更新或添加新记录或输入的值时,我不确定如何更新几千条记录标准。如何在没有索引 + 查找的情况下找到我需要更新/检查的行?

或者我可以在内存中创建一个只有输入数据的临时表,然后以某种方式将该表“合并”到数据库,数据库将弄清楚如何更新或添加?

我觉得这应该是一个非常基本的过程,但也许我只是缺少一些基本的 SQL 概念?

感谢所有的帮助!

标签: sql-serverexcelvbaadodao

解决方案



推荐阅读