sql-server - 使用 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 概念?
感谢所有的帮助!
解决方案
推荐阅读
- java - 如何在不使用安全约束的情况下限制对 web-inf 文件夹的访问
- battlenet-api - 有没有办法获得一个生物的精英和稀有状态(魔兽世界经典)?
- reactjs - 我想从 Constants.js 页面调用 FetchData 函数
- microsoft-graph-api - 如何使用 Graph API 创建在线 MeetingParticipantInfo
- html - 使用css动画让一个div元素移动到页面的各个角落
- android - Android - 仅为特定包名称获取小部件和小部件信息
- gremlin - gremlin 查询 - 如何使用 select in has
- swift - 为什么使用 URL 的 FileManager.default.enumerator 比 Swift 中的 String 快 3 倍?
- stripe-payments - 使用新的条带 api 键出现条带 \ PermissionException 错误
- java - 如何在 JTabbedPane 中添加文件菜单