【问题标题】:How to import only the NEW records during Excel-import from SQL如何在从 SQL 导入 Excel 期间仅导入新记录
【发布时间】:2017-02-14 14:58:12
【问题描述】:

我目前正在接收将数据推送到 SQL Server Express 数据库中的推送。提要每分钟随机更新几次(推送到数据库中)。我想通过每三秒从 Excel 向 SQL Server 数据库调用一次,将新的更新记录导入 Excel。

我发现有三种方法可以将数据从 SQL Server 导入 Excel:

https://www.excel-sql-server.com/excel-sql-server-import-export-using-vba.htm

  1. 使用 QueryTable 导入
  2. 使用 ADO 导入
  3. 使用插件导入

尽管使用这些方法,complete 表每次都是从数据库中导入的。 我只想导入自上次导入以来新添加的记录,因为 SQL Server 数据库变得非常大。

我有两个问题:

1) 如何只导入新添加的记录?

2) 从上述三种导入方法中,关于速度和系统负载最有效的方法是什么?

谢谢!

【问题讨论】:

  • 哇...每三秒?根据数据量,您可能同时运行多个线程。这有很多危险的设计是一个糟糕的设计。对我来说,无论您在这里尝试做什么,Excel 都是错误的工具。通过不断发生的过程,您可以有效地将网络流量翻倍。
  • @Sean,谢谢 Sean,尽管由于我的历史设置,我需要在 Excel 中进行操作。

标签: sql-server excel vba


【解决方案1】:

我认为说Import to Excel 是不正确的。更正确的说法是Export from SQL Server to Excel
有几种方法可以做到这一点。将它们从最简单/最快到复杂/最慢进行评分:

  1. 最简单的一种:将新列添加到 SQL 表中作为“导出标志”,并将其标记为所有导出的列。因此,下次您将能够导出该列中的值为空的最新记录。该列可以具有“BIT”、“TINYINT”甚至“DATETIME”类型,以指示该记录何时导出。只有在不允许向表中添加任何新列的情况下,该方法才会出现问题。以下是在一个事务中更新标志和提取值的示例代码:

UPDATE #tbl_TMP SET Flag = 1 OUTPUT DELETED.A, DELETED.B, DELETED.C WHERE Flag = 0

  1. 如果不允许添加新列,则可以使用表中的现有列。例如,如果您在表中有任何时间戳或增量值,您可以记录最新提取的值,所有大于存储值的记录将是“要提取的最新记录”。
  2. 如果表没有时间戳或增量值,您可以 创建另一个表,其中将包含已提取的列表 表中的键值。然后通过链接这些表,您可以 找出哪些记录是新的。
  3. 如果表没有键值,您可以将所有或几列的 HASH 存储在另一个表中,然后通过该 HASH 链接以找出新的。

【讨论】:

  • 我可以添加一个新列,并且我在表中有增量值。我将尝试在上述三种导入方法之一中编写一些 Excel-VBA 代码。我已经在考虑这个方向了,尽管我希望已经有一个标准命令可用,因为我有点担心这是一个相当密集的过程,每次都要进行查询,如果有的话,它必须符合每条记录的条件被包括在出口中还是被排除在出口中?四种方法中哪一种方法最快?谢谢。
  • 添加 TINYINT 列并对其进行更新将是最简单/最快的。请参阅答案中的更新查询代码。相同的查询执行更新并提取最新数据。
  • 谢谢。这个 Excel VBA 代码是否可以集成到以下位置的导入代码示例中:excel-sql-server.com/…
  • 创意Slava。我认为这确实是最好的解决方案,因为识别新记录的处理保留在数据库中。
【解决方案2】:
  1. 为 Excel 数据创建链接服务器。

  2. 在 SQL Server 表上放置一个 INSERT 触发器以将所有新行插入到电子表格中

【讨论】:

  • 您确定这适用于导入 Excel(= 从 SQL Server 导出)吗?当我在互联网上搜索时,我只能找到相反的查询设置:从 Excel 到 SQL Server)。谢谢。
  • 我相信是这样的:akawn.com/blog/2012/01/…
猜你喜欢
  • 1970-01-01
  • 2020-09-27
  • 1970-01-01
  • 1970-01-01
  • 2021-02-10
  • 1970-01-01
  • 2013-05-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多