将数据从Excel导入到SQL Server中的主详细信息表

时间:2012-07-10 06:47:15

标签: sql sql-server sql-server-2008 tsql dts

我有一张包含四列的Excel工作表

SaleID, SaleDate,PersonID, ProductID, SaleQuantity,UnitRate

我想在一对多关系表中导入这些数据,这样每个人的销售都应该被记录下来。我的表格如下

Sale Master
SaleID,SaleDate,PersonID

SaleDetail
SaleID,productID,SaleQuantity,UnitRate

我正在尝试遵循here的指示。我已经尝试了以下查询来开始

SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0','Excel 12.0;Database=d:\tmp.xlsx', 'Select * from [aa$]')

但它给了我以下错误

OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)" returned message "The Microsoft Office Access database engine could not find the object 'aa$'.  Make sure the object exists and that you spell its name and the path name correctly.".

还有其他更好的方法吗

enter image description here

1 个答案:

答案 0 :(得分:1)

好的,我不确定我是否按照你的意愿这样做了。自从我看到我可以使用SSIS, 我用过SSIS。首先,我创建了一个示例Excel文件。你说它有四列,但我看到六列 专栏:

  

SaleID,SaleDate,PersonID,ProductID,SaleQuantity,UnitRate

在我的测试数据库中,我创建了两个表来将数据导入到:

CREATE TABLE SalesMaster (
SalesID INT NOT NULL,
SalesDate DATE,
PersonID INT
    CONSTRAINT PK_SalesMaster_SalesID
        PRIMARY KEY (SalesID))


CREATE TABLE SalesDetail (
ProductID INT NOT NULL,
SalesQuantity INT,
UnitRate MONEY,
SalesID INT
    CONSTRAINT PK_SalesDetail_ProductID
        PRIMARY KEY (ProductID),
    CONSTRAINT FK_SalesDetail_SalesMaster_SalesID
        FOREIGN KEY (SalesID)
            REFERENCES SalesMaster(SalesID))

然后我为任务创建了一个SSIS包。首先在控制流程中,我使用了两个数据流任务。第一个用于填充SalesMaster表,第二个用于填充SalesDetail表。

每个数据流任务都将具有Excel源适配器和OLE DB目标适配器。配置Excel源时,请确保正确映射Excel文件中的列。然后运行包,它应该完成这项工作。

希望这就是你要找的东西。谢谢!