0

4列のExcelシートがあります

SaleID, SaleDate,PersonID, ProductID, SaleQuantity,UnitRate

このデータを 1 対多の関係テーブルにインポートして、各個人の販売を個別に記録する必要があります。私のテーブルは次のとおりです

Sale Master
SaleID,SaleDate,PersonID

SaleDetail
SaleID,productID,SaleQuantity,UnitRate

ここからの指示に従おうとしています。開始するために次のクエリを試しました

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.".

それを行うための他の良い方法はありますか

ここに画像の説明を入力

4

1 に答える 1

1

さて、あなたが望むようにこれをしたかどうかはわかりません。SSISが使えるのを見て、SSISを使いました。まず、サンプルのExcelファイルを作成しました。4つの列があるとおっしゃいましたが、6つの列が表示されます。

SaleID、SaleDate、PersonID、ProductID、SaleQuantity、UnitRate

また、テストDBで、データをインポートするための2つのテーブルを作成しました。

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パッケージを作成しました。最初に制御フローで、2つのデータフロータスクを使用しました。1つ目はSalesMasterテーブルにデータを入力するためのもので、2つ目はSalesDetailテーブルにデータを入力するためのものです。

各データフロータスクには、ExcelソースアダプターとOLEDB宛先アダプターがあります。Excelソースを構成するときは、Excelファイルの列を正しくマップしていることを確認してください。次に、パッケージを実行すると、ジョブが実行されます。

これがあなたが探しているものであったことを願っています。ありがとう!

于 2012-07-10T19:52:55.413 に答える