索引的替代+使用SQL Server / ADO寻求访问/ DAO

问题描述 投票:0回答:1

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

我用DAO执行的常见任务是索引+搜索方法,用于扫描大量输入行(~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做这样的事情的最好方法?我仍然可能开始加载完整目标表的断开连接的记录集,但是当我不知道我是否需要更新或添加新的或输入的值时,不知道如何更新几千条记录标准。如何在没有index + seek的情况下找到需要更新/检查的行?

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

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

感谢您的帮助!

sql-server excel vba ado dao
1个回答
0
投票

解决方案是编写SQL查询 create procedure dbo.prc_TableNameUpdIns (@parm1 int, @parm2 int) AS IF EXISTS (SELECT * from MyTable WHERE A = @parm1 AND B = @parm2) UPDATE ... ELSE INSERT....

(你可以使用合并,但我建议反对它)

你通过创建一个AdoConnection(在VBA中) dim myAdoConnection as ADOConnection 来调用SP

dim为整数,Y为整数X = 7 Y = 8

'设置myAdoConnection'调用proc myAdoConnection.prc_TableNameUpdIns X,Y

在SQL中处理尽可能多的代码是更可取的。您需要进行此类ADO操作的唯一时间是您只需更新表单而不必更新数据库本身。

关于ADO connection并且更多地研究这个主题,这只是一个指针

© www.soinside.com 2019 - 2024. All rights reserved.