将从Excel导出的非规范化关系数据导入到SQL Server中

我需要从Excel电子表格导入数据到SQL Server,但数据不是关系/标准格式,所以导入向导不会削减它(据我所知)。

数据的格式如下:

Category SubCategory Name Description Category#1 SubCategory#1 Product#1 Description#1 Category#1 SubCategory#1 Product#2 Description#2 Category#1 SubCategory#2 Product#3 Description#3 Category#1 SubCategory#2 Product#4 Description#4 Category#2 SubCategory#3 Product#5 Description#5 

(道歉我缺乏创造力,在这个早晨的时候拿出“真实”的数据…)

每行包含一个独特的产品,但cateogry结构是重复的。 我想将这些数据导入到三个表中:

 Category SubCategory Product 

(我知道SubCategory应该真的被包含在Category中,DB不是我的devise)

我需要一种方法来导入基于Category和SubCategory列的唯一行,然后在将其他列导入Product时,根据名称获取对SubCategory的引用。

没有脚本编写这个,有没有办法使用导入向导或其他工具来做到这一点?

我前一段时间遇到类似的问题,并没有find使用导入向导来完成此操作的简单方法。 我解决导入的方式(因为这是一个一次性的任务,而不是一直要绕过的)是从Excel中创build一个简单的macros(VBA),只需调用一个存储过程,使用每行作为参数。

存储的proc将智能地插入每个参数(列),然后抓取该ID作为下一个参数插入的外键。

例如:


     DECLARE @CategoryID INT
     DECLARE @SubCategoryID INT

     - 检查类别是否存在
     IF NOT EXISTS(SELECT * FROM tblCategories WHERE CategoryName = @pCategoryName)
    开始

         - 你的插入语句在这里,然后抓住ID

         SET @CurrencyID = scope_identity()

    结束
    其他
    开始

         - 在这里设置类别ID

    结束

VBAmacros的代码类似于:


 Private Sub CommandButton1_Click()

    昏暗的cnt作为ADODB.Connection
    昏暗的wbBook作为工作簿
    昏暗的wsSheet作为工作表
     Dim intActiveRow As Long
     Dim intInsuranceProduct As Variant

     “得到我们的连接
    设置cnt = CreateConnection()

     '阅读input表
    设置wbBook = ActiveWorkbook
    设置wsSheet = wbBook.Worksheets(1)

     '忽略标题行
     intActiveRow = 2

     '处理每一行到数据库中
     做(wsSheet.Cells(intActiveRow,1)“”)

          '执行存储过程,GenerateScript将创build你的SQL
          cnt.Execute(GenerateScript(wsSheet,intActiveRow))

          “我增加行数
          intActiveRow = intActiveRow + 1

     循环

    万一

     '打扫干净。

     cnt.Close
    设置cnt = Nothing
    设置wbBook = Nothing
    设置wsSheet = Nothing


结束小组

您可能想要调查以前称为DTS(数据转换服务)的SSIS (SQL Server Integration Services)。
在SSIS中,可以使用Excel作为数据源 ,您可以指定数据的filter和转换以加载到相应的SQL Server表中。 这可能需要一点研究,但它是一个非常强大的工具,并且还支持创build一个脚本任务,如果你需要做的事情不是开箱即用的能力。

实际上,一个专门为此类工作开发的好软件是Relational Excel – 有一个试用版,但它可以在试用期过后使用,每隔一段时间就会显示一次。 http://www.relationalexcel.com