2012-07-10 49 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文件中的列。然後運行包,它應該完成這項工作。

希望這是你在找什麼。謝謝!