如何同步/更新从 MS Access 到 SQL Server 的数据库连接
Posted
技术标签:
【中文标题】如何同步/更新从 MS Access 到 SQL Server 的数据库连接【英文标题】:How to sync/update a database connection from MS Access to SQL Server 【发布时间】:2018-04-11 21:50:36 【问题描述】:问题:
我需要尽可能高效地将 CSV 文件中的数据集导入 SQL Server Express (SSMS v17.6)。数据集每天都会更新到我本地硬盘上的相同 CSV 文件中。目前使用 MS Access 2010 (v14.0) 作为中间人将 CSV 文件聚合到链接表中。
使用下面的解决方案,数据可以完美地传输到 SQL Server 中,并且完全符合我的要求。但是我无法弄清楚如何在每天结束时使用新添加的 CSV 数据刷新/更新/同步数据,而不必每次都重新导入整个数据集。
解决方案:
MS Access 中的升迁向导 - 这在将所有表完美地传输到 SQL Server 数据库时效果最佳。我无法弄清楚如何在不删除并每天重复相同步骤的情况下更新表格。我尝试过的解决方案或链接都没有成功。
SQL Server 导入/导出向导 - 这也适用于一次性将数据传输到 SSMS。但我也无法弄清楚如何用新表更新/同步这些数据。另一个问题是通过这种方法选择 Microsoft Access 作为数据源需要一个 .mdb 文件。最新的 MS Access 文件格式是 .accdb 文件,因此我必须将数据库保存在较旧的 .mdb 版本中才能将其导出到 SQL Server。
约束:
我对 MS Access 没有忠诚度。我真的只是在寻找最有效的方法来将这些 CSV 文件一致地转换为可以对它们执行 SQL 查询的格式。从我读到的所有内容来看,MS Access 似乎是做到这一点的最佳方式。
我的编码知识也有限,所以更高级的 VBA/C++ 解决方案可能会让我头疼。
TLDR:
尝试将几个不同的每日更新本地 CSV 文件放入一个程序中,在该程序中我可以对它们运行 SQL 查询,而无需每天进行完全删除和重新导入。目前使用 MS Access 2010 到 SQL Server Express (SSMS v17.6) 可以满足我的需求,但在不重新导入所有内容的情况下不会每天更新新数据。
谢谢!
【问题讨论】:
如果您认为某个答案对您的问题的回答令您满意,请单击旁边的复选标记将其标记为已接受的答案。 【参考方案1】:您可以使用临时表策略来解决此问题。
当需要执行每日更新时,将所有数据导入一个或多个临时表。执行SQL语句,将导入数据中存在但基础数据中不存在的行插入到基础数据中;同样,从基础数据中删除导入数据中不存在的行;同样,更新已在导入数据中更改值的基础数据行。
使用您的数据依赖关系来确定应该修改表的顺序。
我会先运行所有删除,然后是插入,最后是所有更新。
这应该是一个有趣的挑战!
编辑
你说:
我需要从 CSV 文件中获取数据集到 SQL Server Express(SSMS v17.6) 尽可能高效。
将数据放入 SQL Server 表的最有效方法是使用 SQL 批量复制。这可以通过命令行、SSIS 作业或通过任何 .Net 语言通过 ADO.Net 来实现。
你说:
但我不知道最后如何刷新/更新/同步数据 每天使用新添加的 CSV 数据,而无需重新导入 每次都是整个数据集。
看来你有两个选择:
-
折腾旧数据,换成新数据
修改旧数据,使其与新数据保持一致
为了做到上面的第 1 点,您只需用新数据替换所有现有数据,您已经说过您不想这样做,或者至少您认为自己做不到这有效。为了执行上面的第 2 点,您必须将旧数据与新数据进行比较。为了比较两组数据,无论在哪里进行比较,这两组数据都必须是可访问的。因此,您可以在 SQL Server 中执行比较,但需要将新数据加载到数据库中以进行比较。然后,您可以在该过程完成后清除暂存表。
【讨论】:
有趣。鉴于每天结束时的新数据集需要完全替换所有旧数据集(它正在向后调整),因此不太确定这是否会起作用。因此,仅将新的每日数据中的更多行添加到旧数据中是行不通的。考虑到从 CSV -> Access -> Excel 或 CSV -> Excel 或 Access -> Excel 的更新过程是多么容易,找到解决方案如此困难,我感到很惊讶。我想在将 Excel 替换为 SQL Server 作为最终目标时,我一定错过了一个简单的步骤。 我不确定我是否完全理解这个问题。我会扩展我的答案,也许它会提示你进一步解释。【参考方案2】:在进一步考虑您的问题时,似乎根本问题是:
我真的只是在寻找获取这些 CSV 的最有效方法 文件一致地转换成我可以在其中执行 SQL 查询的格式 他们。
存在专门为允许您查询此类数据而构建的应用程序。
您可能想看看Log Parser Lizard 或Splunk。这些是查询和挖掘隐藏在平面数据文件中的数据的绝佳工具。
【讨论】:
感谢 STL。日志解析器可能会解决问题。今天就去探索一下。感谢您的时间和深思熟虑的回应。【参考方案3】:追加查询能够以增量方式将其他新记录添加到现有表中。然而,问题是您的起点数据集 (CSV) 是否只是新记录,或者该数据集是否包含表中已有的记录。
这是一个经典的难题,需要在附加查询设置中进行管理。
如果 CSV 包含以前的记录 - 那么您必须在 CSV 内建立“新记录”数据子集并仅附加这些数据。例如,如果您有一个排序字段,那么您可以使用现有表 max 中的 > 逻辑。如果不存在,则需要将表数据与 csv 数据进行 NOT 比较,以确定哪些 csv 记录尚未在表中。
您说您寻求“更有效”的东西 - 但实际上没有什么比批量删除所有记录并写入所有记录更有效的了。大多数时候一个人做不到 - 但如果可以的话,我会坚持下去。
【讨论】:
谢谢卡哈巴。在评估了很多不同的选项后,我想我会同意你的最终陈述。感谢您的时间。以上是关于如何同步/更新从 MS Access 到 SQL Server 的数据库连接的主要内容,如果未能解决你的问题,请参考以下文章
如何通过 MS ACCESS 表执行 SQL Server 表的批量更新
如何从 SQL Server 读取 MS Access 数据库以更新一个或多个表列中的数据?
如何使用 SQL 命令从我的 DataTable 对象中使用 foreach-loop 更新 C# 中的 MS Access 数据库?