我有一张包含四列的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.".
还有其他更好的方法吗
答案 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文件中的列。然后运行包,它应该完成这项工作。
希望这就是你要找的东西。谢谢!