繁体   English   中英

如何同步/更新从MS Access到SQL Server的数据库连接

[英]How to sync/update a database connection from MS Access to SQL Server

问题:

我需要尽可能高效地将数据集从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文件,因此为了将其导出到SQL Server,我必须将数据库保存为旧的.mdb版本。

限制条件:

我对MS Access不忠诚。 我真的只是在寻找最有效的方法,以将这些CSV文件一致地转换为一种格式,以便可以对它们执行SQL查询。 从我读过的所有文章来看,MS Access似乎是最好的方法。

我的编码知识也很有限,因此更高级的VBA / C ++解决方案可能会令我头疼。

TLDR:

尝试将多个每日更新的本地CSV文件获取到一个程序中,在该程序中,我可以对它们运行SQL查询,而不必每天进行完全删除和重新导入。 当前使用MS Access 2010到SQL Server Express(SSMS v17.6)可以满足我的需要,但是在不重新导入所有内容的情况下不会每天使用新数据进行更新。

谢谢!

您可以使用登台表策略来解决此问题。

当需要执行每日更新时,请将所有数据导入一个或多个登台表。 执行SQL语句,将导入数据中存在但基础数据中不存在的行插入基础数据; 同样,从基础数据中删除导入数据中不存在的行; 同样,更新已更改导入数据中值的基础数据行。

使用数据依赖关系来确定应按哪些顺序修改表。

我会先运行所有删除操作,然后再执行插入操作,最后运行所有更新。

这应该是一个有趣的挑战!

编辑

你说:

我需要尽可能高效地将数据集从CSV文件导入SQL Server Express(SSMS v17.6)。

将数据放入SQL Server表的最有效方法是使用SQL批量复制。 这可以从命令行,SSIS作业或通过ADO.Net通过任何.Net语言实现。

您声明:

但是我无法弄清楚如何在每天结束时使用新添加的CSV数据刷新/更新/同步数据,而不必每次都重新导入整个数据集。

看来您有两种选择:

  1. 扔掉旧数据并用新数据替换
  2. 修改旧数据,使其与新数据保持一致

为了执行上面的第1条,您只需用新数据替换所有现有数据,您已经说过您不想做,或者至少您认为您不能有效地做到这一点。 为了执行上面的数字2,您必须将旧数据与新数据进行比较。 为了比较两组数据,无论在何处进行比较,都必须可访问两组数据。 因此,您可以在SQL Server中执行比较,但是出于比较目的,需要将新数据加载到数据库中。 然后,您可以在过程完成后清除登台表。

在进一步考虑您的问题时,似乎潜在的问题是:

我真的只是在寻找最有效的方法,以将这些CSV文件一致地转换为一种格式,以便可以对它们执行SQL查询。

存在专门构建用于允许您查询此类数据的应用程序。

您可能想看看Log Parser LizardSplunk 这些是查询和挖掘隐藏在平面数据文件中的数据的出色工具。

追加查询能够将其他新记录增量添加到现有表中。 但是,问题是您的起点数据集(CSV)仅仅是新记录,还是该数据集包含表中已经存在的记录。

这是一个经典的难题,需要在“追加查询”设置中进行管理。

如果CSV包含以前的记录-那么您必须在CSV内建立“新记录”数据子集,然后仅添加这些子集。 例如,如果您有一个排序字段,则可以使用现有表max中的>逻辑。 如果不存在,则需要对表数据与csv数据进行“非”比较,以识别表中尚未存在的csv记录。

您声明要寻找“更高效”的东西-但实际上,没有什么比批量删除所有记录和写入所有记录更有效的了。 大多数时候,人们无法做到这一点-但是,如果可以的话,我会坚持下去。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM