如何在从Excel导入SQL期间仅导入新记录

时间:2017-02-14 14:58:13

标签: sql-server excel-vba vba excel

我目前正在接收带有数据的推送到SQL Server Express数据库。 Feed每分钟随机更新几次(推入数据库)。我想通过每三秒钟从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. 使用加载项导入
  4. 尽管使用这些方法,每次都会从数据库导入完整表。 我只想导入自上次导入以来新添加的记录,因为SQL Server数据库变得非常大。

    我有两个问题:

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

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

    谢谢!

2 个答案:

答案 0 :(得分:0)

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

  1. 最简单的一个:在SQL表中添加一个新列作为“导出标志”,并为所有导出的列标记它。因此,下次您将能够导出该列中的值为空的最新记录。该列可以具有类型“BIT”,“TINYINT”或甚至“DATETIME”以指示何时导出该记录。仅当您不允许向表中添加任何新列时,该方法的问题。以下是一个事务中更新标志和提取值的示例代码:
  2. UPDATE #tbl_TMP SET Flag = 1 OUTPUT DELETED.A, DELETED.B, DELETED.C WHERE Flag = 0

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

答案 1 :(得分:0)

  
      
  1. 为Excel数据创建链接服务器。

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

  4.