2012-07-10 72 views
0

我有一个有四列数据导入到主SQL Server中详细信息表

SaleID, SaleDate,PersonID, ProductID, SaleQuantity,UnitRate 

一个Excel工作表我想在一个导入此数据对许多关系表,使得每个人销售应记录saparately。我的表格如下

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

+0

首先,你不能使用SSIS?其次,你是否100%确定工作表名称是aa?并且文件名是d:\?中的tmp.xlsx。当您尝试此查询时Excel文件是否打开? – Sean 2012-07-10 07:46:14

+0

表单真的叫做“aa”吗? – stb 2012-07-10 07:47:06

+0

@stb是的,我重命名工作表,因为它不工作 – Tassadaque 2012-07-10 08:15:40

回答

1

好吧,我不确定是否按照你的要求做了这个。既然我看到我可以使用SSIS,我使用了SSIS。首先我创建了一个示例Excel文件。你说这有四列,但我看到有六个 列:

SaleID,SaleDate,是PersonID,产品ID,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文件中的列。然后运行包,它应该完成这项工作。

希望这是你在找什么。谢谢!