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

时间:2018-04-11 21:50:37

标签: sql sql-server ms-access ms-access-2010

问题:

我需要尽可能高效地将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),它可以满足我的需求,但不会每天使用新数据进行更新,而无需重新导入所有内容。

谢谢!

3 个答案:

答案 0 :(得分:0)

您可以使用临时表策略来解决此问题。

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

使用您的数据依赖关系来确定应修改哪些订单表。

我会首先运行所有删除,然后插入,最后是所有更新。

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

修改

你说:

  

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

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

你说:

  

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

看来你有两个选择:

  1. 丢弃旧数据并将其替换为新数据
  2. 修改旧数据,使其与新数据保持一致
  3. 为了做上面的第1项,你只需用你已经说过你不想做的新数据替换所有现有数据,或者至少你认为你不能做这有效。为了实现上述数字2,您必须将旧数据与新数据进行比较。为了比较两组数据,无论何处进行比较,都必须能够访问这两组数据。因此,您可以在SQL Server中执行比较,但需要将新数据加载到数据库中以进行比较。然后,您可以在该过程完成后清除临时表。

答案 1 :(得分:0)

在进一步思考你的问题时,似乎潜在的问题是:

  

我真的只是在寻找获得这些CSV的最有效方法   文件一致地进入我可以执行SQL查询的格式   它们。

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

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

答案 2 :(得分:0)

附加查询能够以递增方式将其他新记录添加到现有表中。但问题是您的起始点数据集(CSV)是否只是新记录,或者该数据集是否包含表中已有的记录。

这是一个经典的困境,需要在追加查询设置中进行管理。

如果CSV包含先前记录 - 那么您必须建立新记录'数据子集在CSV中设置并附加那些。例如,如果您有一个测序字段,那么您可以使用>来自现有表格的逻辑最大值如果不存在,则需要对表数据与csv数据进行NOT比较,以确定哪些csv记录尚未存在于表中。

你说你寻求更有效率的东西' - 但实际上没有什么比批量删除所有记录和写入所有记录更有效率了。大部分时间都不能这样做 - 但如果可以,我会坚持下去。