【问题标题】:Nightly Excel Spreadheet import into mssql database每晚将 Excel 电子表格导入 mysql 数据库
【发布时间】:2015-08-07 17:18:25
【问题描述】:

我目前正在处理需要创建的每晚导入,但不确定更新/插入当前表的最佳途径是什么。这一切都在 MS SQL Server 2012 中完成,并从另一台服务器中提取 Excel 文件。我试图弄清楚如何循环遍历列并提取我需要的数据。如果我可以重新排列数据,我会,但我目前坚持我所拥有的。

在我当前的表 tblHW 中,我有诸如 PmpCount、、NumberStages、Pmpmodel_pmp1、serialnum_Pmp1、pmpModel_pmp2、Pmpmodel_pmp2、serialnum_pmp2、partnum_motor1、serialnumberMotor1 等列。对于无法发布真实的表格或图片,我提前道歉。

例子:

|Name      | PmpCount| numstages| pmpmodel_pmp1| stages_pmp1| Sn_pmp1|
|AN 91-23G |        4|       500|        FX2347|         250|  354197|
|BR DN 895R|        5|       521|         D2442|          45|  875164|
|ALN 1-60J |        5|       521|        H21342|          95|  594126|

|pmpmodel_pmp2| stages_pmp2| sn_pmp2| Partnum_mtr1| sn_mtr1|
|FX2347       |         250|  354198|         NULL|    NULL|
|FX17500      |         143|  102547|        M7544| 4512241|
|FX17500      |         143|  458790|        M7544| 4512364|

我要移入 tblHW 的信息来自 tbl Pull_Down。这是设置:

|Name      | Run_ID               | Part1| SN1     |    Attribute1_7|
|AN 21-919G| Oct 08, 2013 / 100845|   BOD|       NA|           3RD U|
|FR 55-013A| Oct 17, 2013 / 100853|   Pmp| 2EA3A022|              78|
|FR 55-013A| Oct 01, 2014 / 101383|   Cbl|      N/A|        REDALEAD|
|FR 43-223J| Apr 03, 2013 / 100594|   BOD|       NA|           3RD U|
|VH 204    | May 17, 2014 / 101145|   BOD|    3RD U|



|Part2| SN2      | Attribute2_7| Part3   | SN3     | Attribute3_7|
|Pmp  |  2EA3F379|           78|      Pmp| 2EA3N380|          117|
|Pmp  |  2EA3C020|          117|      Pmp| 2EA3Y021|          117|
|MLE  | J14312161|          120|      BOD|      N/A|        3RD U|
|Other|        NA|          Pmp| 2EA2X774|       78|
|BOD  |      NULL|          Pmp| 2EA4F075|       38|

更多信息。我以五个 excel 电子表格的形式收到这些信息,每个电子表格有 400 多列。让我最头疼的列是我需要放入 SQL 表的 20 部分列。

我需要以某种方式将每一行移动到 tblHW 中,但需要执行以下操作:

第一行AN 21-919G需要将SN1插入sn_mtr1,因为它是BOD,SN2插入SN_pmp1,因为它是PMP,SN3插入sn_pmp2,因为它是这里的第二个PMP。我还需要获取 pmp 计数,在本例中为 2,然后在 prts 为 PMP 时将属性 1_7 和属性 2_7 添加到 numstages 中。

【问题讨论】:

  • 我不是专家,但也许我可以给你一个高水平的计划。您可以在数据进入 SQL Server 之前或之后格式化数据。如果你想格式化然后把它放进去,我敢打赌 SSIS 解决方案将是你最好的选择。不幸的是,我对 SSIS 不是很熟悉。另一方面,如果您想在 SQL 中执行此操作。我会创建一些临时表来保存原始 excel 数据,然后相应地编写查询以更新其他表。希望这可以帮助。如果您在编写查询时需要帮助,我相信如果不是我,也有人可以帮助您。我还建议尝试 DBA stackexchange 站点。干杯。

标签: sql-server tsql loops insert sql-server-2012


【解决方案1】:

这样的情况是 SSIS 存在的全部目的:集成服务!

第一个问题是为什么您需要的数据在 Excel 中,如果有更直接的路由,可以将其用作链接服务器(如果源是另一个 RDBMS)。

根据您提供的信息,我们做出以下假设: A) 我们无法控制源输出,我们必须从 Excel 导入数据。 B) 文件始终具有一致的列(可能由自动化过程创建)。

在 SSIS 中,您可以轻松地为 Excel 文件创建源连接。如果 Excel 文件名是动态的,您可以在导入数据之前创建一个脚本来修改该连接的连接字符串。然后将目标连接设置为 SQL Server。最后一步是创建一个数据流任务,您可以在其中将源映射到目标列。

示例:

【讨论】:

  • +1 用于警告 Excel,我一生中最严重的偏头痛来自于在 SSIS 中处理 Excel。无论如何都可以将其放入平面文件中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-27
  • 2011-12-23
  • 1970-01-01
  • 2014-07-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多